How to Read Letters and Numbers From a File C++
C programming language supports four pre-defined functions to read contents from a file, divers in stdio.h header file:
- fgetc() – This office is used to read a single graphic symbol from the file.
- fgets() – This function is used to read strings from files.
- fscanf() – This function is used to read the cake of raw bytes from files. This is used to read binary files.
- fread() – This role is used to read formatted input from a file.
Steps To Read A File:
- Open up a file using the function fopen() and store the reference of the file in a FILE arrow.
- Read contents of the file using any of these functions fgetc(), fgets(), fscanf(), or fread().
- File close the file using the function fclose().
Let's begin discussing each of these functions in detail.
fgetc()
fgetc() reads characters pointed past the function pointer at that fourth dimension. On each successful read, it returns the character (ASCII value) read from the stream and advances the read position to the next character. This function returns a constant EOF (-1) when there is no content to read or an unsuccessful read.
Syntax:
int fgetc(FILE *ptr);
Approach:
- This program reads the whole content of the file, using this role by reading characters 1 by 1.
- Practise-While loop volition be used which volition read character until it reaches and of file.
- When it reaches cease it returns EOF grapheme (-1).
          Using EOF:          
Beneath is the C program to implement the above approach-
C
              #include <stdio.h>            
              #include <stdlib.h>            
              #include <string.h>            
              int              master()            
              {            
                            FILE              * ptr;            
                            char              ch;            
                            ptr =                            fopen              (              "test.txt"              ,                            "r"              );            
                            if              (Zip == ptr) {            
                            printf              (              "file tin can't be opened \n"              );            
                            }            
                            printf              (              "content of this file are \n"              );            
                            do              {            
                            ch =                            fgetc              (ptr);            
                            printf              (              "%c"              , ch);            
                            }                            while              (ch != EOF);            
                            fclose              (ptr);            
                            return              0;            
              }            
Input File:
GeeksforGeeks | A computer science portal for geeks
Output:
                  
In the above lawmaking, the arroyo is to read i character from the file and check if it is not EOF, if it is not then print it and if information technology is then stop reading.
          Using feof():          
feof() function takes file pointer as statement and returns truthful if pointer reaches the cease of the file.
Syntax:
int feof(FILE *ptr);
Arroyo:
- In this approach, a character is read using fgetc().
- Using feof() function bank check for end of file. since feof() returns true after it reaches the end.
- Use logical Non operator(!) then that when it reaches end condition get false and loop stop.
Below is the C program to implement the in a higher place approach:
C
              #include <stdio.h>            
              #include <stdlib.h>            
              #include <cord.h>            
              int              main()            
              {            
                            FILE              * ptr;            
                            char              ch;            
                            ptr =                            fopen              (              "test.txt"              ,                            "r"              );            
                            if              (NULL == ptr) {            
                            printf              (              "file tin't be opened \northward"              );            
                            }            
                            printf              (              "content of this file are \due north"              );            
                            while              (!              feof              (ptr)) {            
                            ch =                            fgetc              (ptr);            
                            printf              (              "%c"              , ch);            
                            }            
                            fclose              (ptr);            
                            return              0;            
              }            
Input File:
GeeksforGeeks | A information science portal for geeks
Output:
                  
fgets()
fgets() reads one cord at a fourth dimension from the file. fgets() returns a cord if it is successfully read past function or returns NULL if can non read.
Syntax:
char * fgets(char *str, int size, FILE * ptr);
Hither,
str: It is cord in which fgets() store string after reading information technology from file.
size: Information technology is maximum characters to read from stream.
ptr: It is file pointer.
Approach:
- In this arroyo, the contents of the file are read one graphic symbol at a fourth dimension until we reach the end of the file.
- When nosotros achieve the cease of the file fgets() can't read and returns NULL and the program will terminate reading.
Below is the C program to implement the above arroyo:
C
              #include <stdio.h>            
              #include <stdlib.h>            
              #include <string.h>            
              int              main()            
              {            
                            FILE              * ptr;            
                            char              str[50];            
                            ptr =                            fopen              (              "examination.txt"              ,                            "a+"              );            
                            if              (Aught == ptr) {            
                            printf              (              "file can't be opened \n"              );            
                            }            
                            printf              (              "content of this file are \due north"              );            
                            while              (              fgets              (str, 50, ptr) != NULL) {            
                            printf              (              "%s"              , str);            
                            }            
                            fclose              (ptr);            
                            return              0;            
              }            
Input File:
GeeksforGeeks | A computer science portal for geeks
Output:
                  
fscanf()
fscanf() reads formatted input from a stream.
Syntax:
int fscanf(FILE *ptr, const char *format, …)
Approach:
- fscanf reads formatted data from the files and stores it in variables.
- The data in the buffer is printed on the console till the end of the file is reached.
C++
              #include <stdio.h>            
              int              main()            
              {            
                            FILE              * ptr =                            fopen              (              "abc.txt"              ,                            "r"              );            
                            if              (ptr == Naught) {            
                            printf              (              "no such file."              );            
                            return              0;            
                            }            
                            char              buf[100];            
                            while              (              fscanf              (ptr,                            "%*s %*s %south "              ,            
                            buf)            
                            == one)            
                            printf              (              "%s\n"              , buf);            
                            render              0;            
              }            
Output:
                  
fread()
fread() makes it easier to read blocks of data from a file. For instance, in the case of reading a structure from the file, it becomes an easy job to read using fread.
Syntax:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr: This is the arrow to a block of memory with a minimum size of size*nmemb bytes.
size: This is the size in bytes of each element to be read.
nmemb: This is the number of elements, each one with a size of size bytes.
stream: This is the arrow to a FILE object that specifies an input stream.
Arroyo:
- It first, reads the count number of objects, each 1 with a size of size bytes from the given input stream.
- The full corporeality of bytes reads if successful is (size*count).
- Co-ordinate to the no. of characters read, the indicator file position is incremented.
- If the objects read are not trivially copy-able, then the behavior is undefined and if the value of size or count is equal to goose egg, so this program will simply return 0.
C++
              #include <stdio.h>            
              #include <stdlib.h>            
              #include <cord.h>            
              struct              Course {            
                            char              cname[30];            
                            char              sdate[xxx];            
              };            
              int              primary()            
              {            
                            FILE              * of;            
                            of =                            fopen              (              "test.txt"              ,                            "w"              );            
                            if              (of == NULL) {            
                            fprintf              (stderr,            
                            "\nError to open the file\n"              );            
                            exit              (1);            
                            }            
                            struct              Class inp1 = {                            "Algorithms"              ,            
                            "30OCT"              };            
                            struct              Form inp2 = {                            "DataStructures"              ,            
                            "28SEPT"              };            
                            struct              Course inp3 = {                            "Programming"              ,            
                            "1NOV"              };            
                            fwrite              (&inp1,                            sizeof              (              struct              Class),            
                            1, of);            
                            fwrite              (&inp2,                            sizeof              (              struct              Course),            
                            ane, of);            
                            fwrite              (&inp3,                            sizeof              (              struct              Course),            
                            1, of);            
                            if              (              fwrite              != 0)            
                            printf              (              "Contents to file written successfully !\n"              );            
                            else            
                            printf              (              "Error writing file !\n"              );            
                            fclose              (of);            
                            FILE              * inf;            
                            struct              Course inp;            
                            inf =                            fopen              (              "test.txt"              ,                            "r"              );            
                            if              (inf == NULL) {            
                            fprintf              (stderr,            
                            "\nError to open the file\n"              );            
                            go out              (1);            
                            }            
                            while              (              fread              (&inp,                            sizeof              (              struct              Course),            
                            1, inf))            
                            printf              (              "Course Name = %s Started = %s\northward"              ,            
                            inp.cname, inp.sdate);            
                            fclose              (inf);            
              }            
Output:
                  
Source: https://www.geeksforgeeks.org/c-program-to-read-contents-of-whole-file/