C 프로그래밍 언어 stdio.h 헤더 파일에 정의된 파일의 내용을 읽는 사전 정의된 네 가지 함수를 지원합니다.
- fgetc() – 이 함수는 파일에서 단일 문자를 읽는 데 사용됩니다.
- fgets() – 이 함수는 파일에서 문자열을 읽는 데 사용됩니다.
- fscanf() – 이 함수는 파일에서 형식화된 입력을 읽는 데 사용됩니다.
- fread() – 이 함수는 파일에서 원시 바이트 블록을 읽는 데 사용됩니다. 바이너리 파일을 읽는 데 사용됩니다.
파일을 읽는 단계:
- fopen() 함수를 사용하여 파일을 열고 파일 참조를 FILE 포인터에 저장합니다.
- fgetc(), fgets(), fscanf() 또는 fread() 함수 중 하나를 사용하여 파일의 내용을 읽습니다.
- 파일은 fclose() 함수를 사용하여 파일을 닫습니다.
각 기능에 대해 자세히 논의해 보겠습니다.
버블 정렬 파이썬
fgetc()
fgetc()는 해당 시점에 함수 포인터가 가리키는 문자를 읽습니다. 읽기가 성공할 때마다 스트림에서 읽은 문자(ASCII 값)를 반환하고 읽기 위치를 다음 문자로 이동합니다. 이 함수는 읽을 내용이 없거나 읽기에 실패한 경우 상수 EOF(-1)를 반환합니다.
통사론:
int fgetc(FILE *ptr);
접근하다:
- 이 프로그램은 이 기능을 사용하여 문자를 하나씩 읽어 파일의 전체 내용을 읽습니다.
- 파일 끝에 도달할 때까지 문자를 읽는 Do-While 루프가 사용됩니다.
- 끝에 도달하면 EOF 문자(-1)를 반환합니다.
EOF 사용:
다음은 위의 접근 방식을 구현하는 C 프로그램입니다.
씨
// C program to implement> // the above approach> #include> #include> #include> // Driver code> int> main()> {> >FILE>* ptr;> >char> ch;> >// Opening file in reading mode> >ptr =>fopen>(>'test.txt'>,>'r'>);> >if> (NULL == ptr) {> >printf>(>'file can't be opened
'>);> >}> >printf>(>'content of this file are
'>);> >// Printing what is written in file> >// character by character using loop.> >do> {> >ch =>fgetc>(ptr);> >printf>(>'%c'>, ch);> >// Checking if character is not EOF.> >// If it is EOF stop reading.> >}>while> (ch != EOF);> >// Closing the file> >fclose>(ptr);> >return> 0;> }> |
>
>
입력 파일:
techcodeview.com | A computer science portal for geeks>
산출:
위 코드에서 접근 방식은 파일에서 한 문자를 읽고 EOF가 아닌지 확인하고, 그렇지 않으면 인쇄하고, 읽기를 중지하는 것입니다.
feof() 사용:
feof() 함수는 파일 포인터를 인수로 취하고 포인터가 파일 끝에 도달하면 true를 반환합니다.
통사론:
int feof(FILE *ptr);
접근하다:
- 이 접근 방식에서는 fgetc()를 사용하여 문자를 읽습니다.
- feof() 함수를 사용하여 파일 끝을 확인합니다. feof()는 끝에 도달한 후에 true를 반환하기 때문입니다.
- 종료 조건에 도달하면 false가 되고 루프가 중지되도록 논리 NOT 연산자(!)를 사용하십시오.
다음은 위의 접근 방식을 구현하는 C 프로그램입니다.
씨
// C program to implement> // the above approach> #include> #include> #include> // Driver code> int> main()> {> >FILE>* ptr;> >char> ch;> >ptr =>fopen>(>'test.txt'>,>'r'>);> >if> (NULL == ptr) {> >printf>(>'file can't be opened
'>);> >}> >printf>(>'content of this file are
'>);> >while> (!>feof>(ptr)) {> >ch =>fgetc>(ptr);> >printf>(>'%c'>, ch);> >}> >fclose>(ptr);> >return> 0;> }> |
>
>
입력 파일:
techcodeview.com | A computer science portal for geeks>
산출:
fgets()
fgets()는 파일에서 한 번에 하나의 문자열을 읽습니다. fgets()는 함수가 성공적으로 읽었으면 문자열을 반환하고, 읽을 수 없으면 NULL을 반환합니다.
통사론:
char * fgets(char *str, int 크기, FILE * ptr);
여기,
str: fgets()가 파일에서 문자열을 읽어서 저장하는 문자열입니다.
크기: 스트림에서 읽을 수 있는 최대 문자 수입니다.
ptr: 파일 포인터입니다.
접근하다:
- 이 접근 방식에서는 파일 끝에 도달할 때까지 파일 내용을 한 번에 한 문자씩 읽습니다.
- 파일 끝에 도달하면 fgets()는 읽을 수 없으며 NULL을 반환하고 프로그램은 읽기를 중지합니다.
다음은 위의 접근 방식을 구현하는 C 프로그램입니다.
씨
3분기에는 몇 달이 있나요?
// C program to implement> // the above approach> #include> #include> #include> // Driver code> int> main()> {> >FILE>* ptr;> >char> str[50];> >ptr =>fopen>(>'test.txt'>,>'a+'>);> >if> (NULL == ptr) {> >printf>(>'file can't be opened
'>);> >}> >printf>(>'content of this file are
'>);> >while> (>fgets>(str, 50, ptr) != NULL) {> >printf>(>'%s'>, str);> >}> >fclose>(ptr);> >return> 0;> }> |
>
>
입력 파일:
techcodeview.com | A computer science portal for geeks>
산출:
fscanf()
fscanf()는 스트림에서 형식화된 입력을 읽습니다.
통사론:
int fscanf(FILE *ptr, const char *format, …)
접근하다:
- fscanf는 파일에서 형식화된 데이터를 읽고 이를 변수에 저장합니다.
- 버퍼의 데이터는 파일 끝에 도달할 때까지 콘솔에 인쇄됩니다.
C++
// C program to implement> // the above approach> #include> // Driver code> int> main()> {> >FILE>* ptr =>fopen>(>'abc.txt'>,>'r'>);> >if> (ptr == NULL) {> >printf>(>'no such file.'>);> >return> 0;> >}> >/* Assuming that test.txt has content> >in below format> >NAME AGE CITY> >abc 12 hyderbad> >bef 25 delhi> >cce 65 bangalore */> >char> buf[100];> >while> (>fscanf>(ptr,>'%*s %*s %s '>,> >buf)> >== 1)> >printf>(>'%s
'>, buf);> >return> 0;> }> |
>
>
산출:
fread()
fread()를 사용하면 파일에서 데이터 블록을 더 쉽게 읽을 수 있습니다. 예를 들어, 파일에서 구조를 읽는 경우 fread를 사용하면 쉽게 읽을 수 있는 작업이 됩니다.
통사론:
size_t fread(void *ptr, size_t 크기, size_t nmemb, FILE *stream)
ptr: 이는 최소 크기가 size*nmemb 바이트인 메모리 블록에 대한 포인터입니다.
크기: 읽을 각 요소의 바이트 크기입니다.
nmemb: 이는 요소의 수이며 각 요소의 크기는 size 바이트입니다.
개울: 입력 스트림을 지정하는 FILE 개체에 대한 포인터입니다.
접근하다:
- 먼저 주어진 입력 스트림에서 size 바이트 크기의 객체 수를 읽습니다.
- 성공할 경우 읽는 총 바이트 양은 (size*count)입니다.
- 아니오에 따르면. 읽은 문자 수만큼 표시기 파일 위치가 증가합니다.
- 읽은 객체가 쉽게 복사할 수 없는 경우 동작은 정의되지 않으며 크기 또는 개수의 값이 0과 같으면 이 프로그램은 단순히 0을 반환합니다.
C++
// C program to implement> // the above approach> #include> #include> #include> // Structure to store> // course details> struct> Course {> >char> cname[30];> >char> sdate[30];> };> // Driver code> int> main()> {> >FILE>* of;> >of =>fopen>(>'test.txt'>,>'w'>);> >if> (of == NULL) {> >fprintf>(stderr,> >'
Error to open the file
'>);> >exit>(1);> >}> >struct> Course inp1 = {>'Algorithms'>,> >'30OCT'> };> >struct> Course inp2 = {>'DataStructures'>,> >'28SEPT'> };> >struct> Course inp3 = {>'Programming'>,> >'1NOV'> };> >fwrite>(&inp1,>sizeof>(>struct> Course),> >1, of);> >fwrite>(&inp2,>sizeof>(>struct> Course),> >1, of);> >fwrite>(&inp3,>sizeof>(>struct> Course),> >1, of);> >if> (>fwrite> != 0)> >printf>(>'Contents to file written successfully !
'>);> >else> >printf>(>'Error writing file !
'>);> >fclose>(of);> >// File pointer to read from file> >FILE>* inf;> >struct> Course inp;> >inf =>fopen>(>'test.txt'>,>'r'>);> >if> (inf == NULL) {> >fprintf>(stderr,> >'
Error to open the file
'>);> >exit>(1);> >}> >while> (>fread>(&inp,>sizeof>(>struct> Course),> >1, inf))> >printf>(>'Course Name = %s Started = %s
'>,> >inp.cname, inp.sdate);> >fclose>(inf);> }> |
>
>
산출: