C언어에서는 스캔프() 함수는 stdin에서 형식화된 입력을 읽는 데 사용됩니다. 그 안에 쓰여진 전체 문자 수를 반환하고, 그렇지 않으면 음수 값을 반환합니다.
통사론:
int scanf(const char *characters_set)>
시간 복잡도: 에)
보조 공간: O(n) 여기서 n은 입력 길이입니다.
우리 중 많은 사람들이 scanf의 전통적인 사용법을 알고 있습니다. 글쎄, 여기에 덜 알려진 사실이 있습니다.
노트북 삽입 키
필요한 입력의 일부만 읽는 방법은 무엇입니까?
예를 들어, 정수나 부동소수가 뒤따르는 문자만 포함하는 일부 입력 스트림을 생각해 보십시오. 그리고 해당 정수 또는 부동소수점만 스캔하면 됩니다.
예:
Input : 'this is the value 100', Output : value read is 100 Input : 'this is the value 21.2', Output : value read is 21.2>씨
// C program to demonstrate that // we can ignore some string // in scanf() #include int main() { int a; scanf('This is the value %d', &a); printf('Input value read : a = %d', a); return 0; } // Input : This is the value 100>
이제 앞의 문자가 무엇인지 모르지만 마지막 값이 정수라는 것은 확실히 알고 있다고 가정합니다. 마지막 값을 정수로 어떻게 스캔할 수 있나요?
아래 솔루션은 입력 문자열에 공백이 없는 경우에만 작동합니다. 예를 들어,
입력
'blablabla 25'>씨
// C program to demonstrate use of *s #include int main() { int a; scanf('%*s %d', &a); printf('Input value read : a=%d', a); return 0; }> 산출
Input Value read : 25>
설명 : scanf의 %*s는 필요에 따라 일부 입력을 무시하는 데 사용됩니다. 이 경우 다음 공백이나 줄 바꿈까지 입력을 무시합니다. 마찬가지로 %*d를 쓰면 다음 공백이나 개행 문자까지 정수를 무시합니다.
scanf( )의 일반적인 사용법:
씨 // C program to demonstrate general use of scanf() #include int main() { int a; scanf('%d', &a); printf('a = %d', a); return 0; }> 입력
2>
산출
a = 2>
위의 사실은 언뜻 보면 유용한 트릭처럼 보이지 않을 수도 있습니다. 사용법을 이해하기 위해 먼저 fscanf()를 살펴보겠습니다.
C의 fscanf 함수
파일에서 읽는 모든 서투른 구문에 지치셨나요? 음, fscanf가 구출됩니다. 이 함수는 C 언어로 지정된 스트림에서 형식화된 입력을 읽는 데 사용됩니다.
통사론:
int fscanf(FILE *ptr, const char *format, ...)>
fscanf는 입력 스트림에서 읽는 대신 FILE 포인터(ptr)가 가리키는 파일에서 읽습니다.
반환 값: 실패할 경우 0 또는 EOF를 반환합니다. 그렇지 않으면 성공적으로 할당된 항목 수를 반환합니다.
시간 복잡도: 에)
보조 공간: O(n) 여기서 n은 입력의 길이입니다.
멍청한 평균
예시 1: 다음 텍스트 파일 abc.txt를 고려해 보세요.
NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore>
이제 위 텍스트 파일의 도시 필드만 읽고 다른 모든 필드는 무시하려고 합니다. 위에서 언급한 fscanf와 트릭을 결합하면 이 작업이 쉽게 수행됩니다.
씨 // C Program to demonstrate fscanf #include // Driver Code int main() { FILE* ptr = fopen('abc.txt', 'r'); if (ptr == NULL) { printf('no such file.'); return 0; } /* Assuming that abc.txt has content in below format NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore */ char buf[100]; while (fscanf(ptr, '%*s %*s %s ', buf) == 1) printf('%s
', buf); return 0; }> 산출
CITY hyderabad delhi bangalore>
예시 2: 다음 바이너리 파일 program.bin을 고려하세요.
n1 n2 n3 1 5 6 2 10 11 3 15 16 4 20 21>
bin의 n1, n2 & n3 값을 모두 읽으려면 fscanf()를 사용합니다.
씨 #include #include struct threeNum{ int n1, n2, n3; }; int main(){ int n; struct threeNum num; FILE *fptr; if ((fptr = fopen('program.bin','rb')) == NULL){ printf('Error! opening file'); // Program exits if the file pointer returns NULL. exit(1); } for(n = 1; n < 5; ++n){ fread(&num, sizeof(struct threeNum), 1, fptr); printf('n1: %d n2: %d n3: %d', num.n1, num.n2, num.n3); } fclose(fptr); return 0; } //Code submitted by Susobhan Akhuli> 산출
n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>
차이점을 표 형식으로 살펴보겠습니다.
| 스캔프() | fscanf() | |
| 1. | 표준 입력을 읽는 데 사용됩니다. | 이 함수는 파일에서 입력을 읽는 데 사용됩니다. |
| 2. | 구문은 -: scanf(const char *형식, …) 키보드에 삽입 | 구문은 -: fscanf(FILE *스트림, const char *형식, …) |
| 삼. | 특정 유형의 입력을 받으려면 형식 지정자가 필요합니다. | 바이트 형식으로 스트림을 읽습니다. |
| 4. | 다음과 같은 세 가지 매개변수를 사용합니다. 공백 문자, 공백이 아닌 문자, 형식 지정자 | 헤더 파일 #include에 정의되어 있습니다. |