C 전체 파일의 내용을 읽는 프로그램

C 프로그래밍 언어 stdio.h 헤더 파일에 정의된 파일의 내용을 읽는 사전 정의된 네 가지 함수를 지원합니다.

  1. fgetc() 이 함수는 파일에서 단일 문자를 읽는 데 사용됩니다.
  2. fgets() 이 함수는 파일에서 문자열을 읽는 데 사용됩니다.
  3. fscanf() 이 함수는 파일에서 형식화된 입력을 읽는 데 사용됩니다.
  4. 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 프로그램입니다.




// 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);> }>

산출: