C++ Read Numbers and Characters From File
C programming language supports four pre-defined functions to read contents from a file, defined in stdio.h header file:
- fgetc() – This function is used to read a single character from the file.
- fgets() – This function is used to read strings from files.
- fscanf() – This function is used to read the block of raw bytes from files. This is used to read binary files.
- fread() – This function is used to read formatted input from a file.
Steps To Read A File:
- Open a file using the function fopen() and store the reference of the file in a FILE pointer.
- Read contents of the file using any of these functions fgetc(), fgets(), fscanf(), or fread().
- File close the file using the function fclose().
Let'due south begin discussing each of these functions in particular.
fgetc()
fgetc() reads characters pointed by 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 abiding 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 office past reading characters one by ane.
- Do-While loop will be used which will read character until information technology reaches and of file.
- When it reaches end it returns EOF graphic symbol (-ane).
Using EOF:
Below is the C program to implement the above approach-
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE * ptr;
char ch;
ptr = fopen ( "examination.txt" , "r" );
if (NULL == ptr) {
printf ( "file can't be opened \n" );
}
printf ( "content of this file are \due north" );
do {
ch = fgetc (ptr);
printf ( "%c" , ch);
} while (ch != EOF);
fclose (ptr);
return 0;
}
Input File:
GeeksforGeeks | A estimator science portal for geeks
Output:
In the above code, the approach is to read one character from the file and check if it is not EOF, if information technology is not then print information technology and if information technology is and so stop reading.
Using feof():
feof() part takes file arrow as statement and returns truthful if pointer reaches the end of the file.
Syntax:
int feof(FILE *ptr);
Approach:
- In this approach, a grapheme is read using fgetc().
- Using feof() role bank check for end of file. since feof() returns true afterward information technology reaches the stop.
- Use logical NOT operator(!) then that when it reaches end condition become faux and loop terminate.
Below is the C plan to implement the above approach:
C
#include <stdio.h>
#include <stdlib.h>
#include <cord.h>
int main()
{
FILE * ptr;
char ch;
ptr = fopen ( "test.txt" , "r" );
if (Nil == ptr) {
printf ( "file tin can't be opened \north" );
}
printf ( "content of this file are \north" );
while (! feof (ptr)) {
ch = fgetc (ptr);
printf ( "%c" , ch);
}
fclose (ptr);
return 0;
}
Input File:
GeeksforGeeks | A computer science portal for geeks
Output:
fgets()
fgets() reads one string at a time from the file. fgets() returns a string if it is successfully read past function or returns Nil if can not read.
Syntax:
char * fgets(char *str, int size, FILE * ptr);
Here,
str: Information technology is cord in which fgets() store string after reading it from file.
size: It is maximum characters to read from stream.
ptr: It is file pointer.
Approach:
- In this approach, the contents of the file are read one graphic symbol at a time until we attain the stop of the file.
- When we reach the stop of the file fgets() can't read and returns NULL and the program will terminate reading.
Beneath is the C program to implement the above approach:
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE * ptr;
char str[50];
ptr = fopen ( "test.txt" , "a+" );
if (Nil == ptr) {
printf ( "file can't exist opened \north" );
}
printf ( "content of this file are \n" );
while ( fgets (str, 50, ptr) != Nothing) {
printf ( "%s" , str);
}
fclose (ptr);
render 0;
}
Input File:
GeeksforGeeks | A information 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 chief()
{
FILE * ptr = fopen ( "abc.txt" , "r" );
if (ptr == Nix) {
printf ( "no such file." );
return 0;
}
char buf[100];
while ( fscanf (ptr, "%*south %*s %due south " ,
buf)
== 1)
printf ( "%s\north" , buf);
return 0;
}
Output:
fread()
fread() makes information technology easier to read blocks of data from a file. For instance, in the example of reading a structure from the file, information technology becomes an like shooting fish in a barrel task 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 i with a size of size bytes.
stream: This is the pointer to a FILE object that specifies an input stream.
Approach:
- Information technology starting time, reads the count number of objects, each one with a size of size bytes from the given input stream.
- The total amount of bytes reads if successful is (size*count).
- According to the no. of characters read, the indicator file position is incremented.
- If the objects read are not trivially re-create-able, and then the behavior is undefined and if the value of size or count is equal to zero, then this program will simply return 0.
C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Course {
char cname[30];
char sdate[xxx];
};
int main()
{
FILE * of;
of = fopen ( "test.txt" , "due west" );
if (of == Null) {
fprintf (stderr,
"\nError to open the file\n" );
exit (1);
}
struct Class inp1 = { "Algorithms" ,
"30OCT" };
struct Course inp2 = { "DataStructures" ,
"28SEPT" };
struct Course inp3 = { "Programming" ,
"1NOV" };
fwrite (&inp1, sizeof ( struct Form),
1, of);
fwrite (&inp2, sizeof ( struct Form),
1, 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" );
exit (1);
}
while ( fread (&inp, sizeof ( struct Course),
1, inf))
printf ( "Course Name = %s Started = %south\north" ,
inp.cname, inp.sdate);
fclose (inf);
}
Output:
Source: https://www.geeksforgeeks.org/c-program-to-read-contents-of-whole-file/
0 Response to "C++ Read Numbers and Characters From File"
ارسال یک نظر