Reading Different Types From a File C++
C programming linguistic communication supports four pre-defined functions to read contents from a file, divers in stdio.h header file:
- fgetc() – This role is used to read a unmarried character from the file.
- fgets() – This role 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 function 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 shut the file using the office fclose().
Allow'south begin discussing each of these functions in detail.
fgetc()
fgetc() reads characters pointed by the function pointer at that time. On each successful read, it returns the character (ASCII value) read from the stream and advances the read position to the side by side character. This function returns a constant EOF (-one) 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 function by reading characters one past ane.
- Exercise-While loop will be used which will read character until it reaches and of file.
- When it reaches terminate it returns EOF grapheme (-1).
Using EOF:
Beneath is the C plan to implement the above arroyo-
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
master()
{
FILE
* ptr;
char
ch;
ptr =
fopen
(
"exam.txt"
,
"r"
);
if
(NULL == ptr) {
printf
(
"file tin'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 to a higher place code, the approach is to read one character from the file and bank check if it is not EOF, if it is not then print it and if information technology is then stop reading.
Using feof():
feof() part takes file pointer every bit statement and returns true if pointer reaches the end of the file.
Syntax:
int feof(FILE *ptr);
Approach:
- In this arroyo, a character is read using fgetc().
- Using feof() part check for end of file. since feof() returns true after it reaches the end.
- Use logical NOT operator(!) and so that when it reaches end condition become fake and loop stop.
Below is the C program to implement the in a higher place arroyo:
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 can't be opened \n"
);
}
printf
(
"content of this file are \north"
);
while
(!
feof
(ptr)) {
ch =
fgetc
(ptr);
printf
(
"%c"
, ch);
}
fclose
(ptr);
render
0;
}
Input File:
GeeksforGeeks | A computer science portal for geeks
Output:
fgets()
fgets() reads 1 string at a fourth dimension from the file. fgets() returns a string if information technology is successfully read by office or returns NULL if can not read.
Syntax:
char * fgets(char *str, int size, FILE * ptr);
Here,
str: It is string in which fgets() store cord subsequently 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 character at a time until we reach the terminate of the file.
- When nosotros reach the end of the file fgets() can't read and returns NULL and the plan volition cease reading.
Below is the C program to implement the to a higher place approach:
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
FILE
* ptr;
char
str[50];
ptr =
fopen
(
"test.txt"
,
"a+"
);
if
(NULL == ptr) {
printf
(
"file can't be opened \n"
);
}
printf
(
"content of this file are \due north"
);
while
(
fgets
(str, 50, ptr) != NULL) {
printf
(
"%south"
, 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 information 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 %*due south %s "
,
buf)
== one)
printf
(
"%south\n"
, buf);
return
0;
}
Output:
fread()
fread() makes information technology 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 pointer to a cake of retentiveness 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 ane with a size of size bytes.
stream: This is the arrow to a FILE object that specifies an input stream.
Approach:
- It kickoff, reads the count number of objects, each 1 with a size of size bytes from the given input stream.
- The total amount 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 re-create-able, then the behavior is undefined and if the value of size or count is equal to zero, then this plan will but return 0.
C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct
Form {
char
cname[30];
char
sdate[thirty];
};
int
main()
{
FILE
* of;
of =
fopen
(
"test.txt"
,
"w"
);
if
(of == NULL) {
fprintf
(stderr,
"\nError to open the file\north"
);
exit
(i);
}
struct
Course inp1 = {
"Algorithms"
,
"30OCT"
};
struct
Course inp2 = {
"DataStructures"
,
"28SEPT"
};
struct
Form inp3 = {
"Programming"
,
"1NOV"
};
fwrite
(&inp1,
sizeof
(
struct
Class),
1, of);
fwrite
(&inp2,
sizeof
(
struct
Grade),
1, of);
fwrite
(&inp3,
sizeof
(
struct
Course),
1, of);
if
(
fwrite
!= 0)
printf
(
"Contents to file written successfully !\n"
);
else
printf
(
"Fault writing file !\north"
);
fclose
(of);
FILE
* inf;
struct
Course inp;
inf =
fopen
(
"test.txt"
,
"r"
);
if
(inf == NULL) {
fprintf
(stderr,
"\nError to open the file\due north"
);
go out
(1);
}
while
(
fread
(&inp,
sizeof
(
struct
Class),
i, inf))
printf
(
"Course Name = %southward Started = %due south\n"
,
inp.cname, inp.sdate);
fclose
(inf);
}
Output:
whitlockouldemove.blogspot.com
Source: https://www.geeksforgeeks.org/c-program-to-read-contents-of-whole-file/
0 Response to "Reading Different Types From a File C++"
Post a Comment