Reading in Data From a File C
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 office 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 part is used to read formatted input from a file.
Steps To Read A File:
- Open a file using the function fopen() and shop 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 role fclose().
Let'southward begin discussing each of these functions in item.
fgetc()
fgetc() reads characters pointed by the function pointer at that time. On each successful read, it returns the graphic symbol (ASCII value) read from the stream and advances the read position to the next character. This part returns a constant EOF (-1) when there is no content to read or an unsuccessful read.
Syntax:
int fgetc(FILE *ptr);
Arroyo:
- This program reads the whole content of the file, using this role by reading characters one past i.
- Do-While loop will be used which will read character until it reaches and of file.
- When it reaches terminate it returns EOF character (-1).
Using EOF:
Below is the C programme to implement the above arroyo-
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int chief()
{
FILE * ptr;
char ch;
ptr = fopen ( "examination.txt" , "r" );
if (Nix == ptr) {
printf ( "file 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 reckoner scientific discipline portal for geeks
Output:
In the in a higher place code, the approach is to read one character from the file and cheque if it is not EOF, if information technology is non then print information technology and if it is then terminate reading.
Using feof():
feof() office takes file arrow as argument and returns truthful if pointer reaches the end of the file.
Syntax:
int feof(FILE *ptr);
Approach:
- In this approach, a graphic symbol is read using fgetc().
- Using feof() function check for end of file. since feof() returns truthful after it reaches the end.
- Use logical Non operator(!) and then that when it reaches cease condition become false and loop stop.
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 ch;
ptr = fopen ( "test.txt" , "r" );
if (Zip == ptr) {
printf ( "file can't exist opened \north" );
}
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 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 by function or returns Cipher if can not read.
Syntax:
char * fgets(char *str, int size, FILE * ptr);
Here,
str: It is cord in which fgets() store string after reading information technology 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 grapheme at a time until we reach the end of the file.
- When we attain the end of the file fgets() tin't read and returns Cipher and the programme will end reading.
Below is the C program to implement the above approach:
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int primary()
{
FILE * ptr;
char str[50];
ptr = fopen ( "test.txt" , "a+" );
if (Zero == ptr) {
printf ( "file tin can't be opened \n" );
}
printf ( "content of this file are \n" );
while ( fgets (str, 50, ptr) != Zippo) {
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 information technology 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 == NULL) {
printf ( "no such file." );
return 0;
}
char buf[100];
while ( fscanf (ptr, "%*s %*south %s " ,
buf)
== one)
printf ( "%s\north" , buf);
return 0;
}
Output:
fread()
fread() makes it easier to read blocks of data from a file. For instance, in the example 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 pointer to a cake 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 1 with a size of size bytes.
stream: This is the pointer to a FILE object that specifies an input stream.
Arroyo:
- It beginning, 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 non trivially copy-able, then the behavior is undefined and if the value of size or count is equal to cipher, then this plan volition simply return 0.
C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Course {
char cname[thirty];
char sdate[xxx];
};
int main()
{
FILE * of;
of = fopen ( "test.txt" , "w" );
if (of == NULL) {
fprintf (stderr,
"\nError to open up the file\n" );
go out (1);
}
struct Course inp1 = { "Algorithms" ,
"30OCT" };
struct Course inp2 = { "DataStructures" ,
"28SEPT" };
struct Class inp3 = { "Programming" ,
"1NOV" };
fwrite (&inp1, sizeof ( struct Course),
1, of);
fwrite (&inp2, sizeof ( struct Grade),
i, of);
fwrite (&inp3, sizeof ( struct Form),
1, of);
if ( fwrite != 0)
printf ( "Contents to file written successfully !\n" );
else
printf ( "Fault writing file !\northward" );
fclose (of);
FILE * inf;
struct Course inp;
inf = fopen ( "test.txt" , "r" );
if (inf == NULL) {
fprintf (stderr,
"\nError to open up the file\due north" );
leave (1);
}
while ( fread (&inp, sizeof ( struct Grade),
one, inf))
printf ( "Course Name = %s Started = %s\n" ,
inp.cname, inp.sdate);
fclose (inf);
}
Output:
Source: https://www.geeksforgeeks.org/c-program-to-read-contents-of-whole-file/
0 Response to "Reading in Data From a File C"
Post a Comment