C Easiest Way to Read in File to String
C programming linguistic communication supports four pre-divers functions to read contents from a file, divers in stdio.h header file:
- fgetc() – This function is used to read a single character from the file.
- fgets() – This part is used to read strings from files.
- fscanf() – This role 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 shut the file using the function fclose().
Allow'due 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, information technology returns the grapheme (ASCII value) read from the stream and advances the read position to the adjacent graphic symbol. 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 plan reads the whole content of the file, using this function by reading characters one by one.
- Do-While loop will exist used which will read character until it reaches and of file.
- When information technology reaches end information technology returns EOF character (-ane).
Using EOF:
Beneath is the C program to implement the in a higher place 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 tin't be opened \north"
);
}
printf
(
"content of this file are \northward"
);
exercise
{
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 in a higher place code, the approach is to read i graphic symbol from the file and cheque if it is not EOF, if it is not then print it and if it is then stop reading.
Using feof():
feof() function takes file pointer as statement and returns true if arrow reaches the end of the file.
Syntax:
int feof(FILE *ptr);
Approach:
- In this approach, a character is read using fgetc().
- Using feof() function bank check for cease of file. since feof() returns true after it reaches the cease.
- Apply logical NOT operator(!) so that when it reaches end status get faux and loop stop.
Below 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
(NULL == ptr) {
printf
(
"file can't be opened \due north"
);
}
printf
(
"content of this file are \northward"
);
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 one string at a fourth dimension from the file. fgets() returns a cord if it is successfully read by function or returns NULL if tin not read.
Syntax:
char * fgets(char *str, int size, FILE * ptr);
Here,
str: It is string in which fgets() shop string after reading it from file.
size: It is maximum characters to read from stream.
ptr: It is file pointer.
Arroyo:
- In this approach, the contents of the file are read one grapheme at a time until we achieve the end of the file.
- When we reach the end of the file fgets() tin can't read and returns Cypher and the programme will end reading.
Below is the C plan to implement the above arroyo:
C
#include <stdio.h>
#include <stdlib.h>
#include <cord.h>
int
principal()
{
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 \n"
);
while
(
fgets
(str, 50, ptr) != NULL) {
printf
(
"%s"
, str);
}
fclose
(ptr);
render
0;
}
Input File:
GeeksforGeeks | A informatics 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 == Nothing) {
printf
(
"no such file."
);
return
0;
}
char
buf[100];
while
(
fscanf
(ptr,
"%*s %*s %s "
,
buf)
== one)
printf
(
"%s\northward"
, buf);
render
0;
}
Output:
fread()
fread() makes it easier to read blocks of data from a file. For case, in the example of reading a construction from the file, it becomes an like shooting fish in a barrel 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 block of retentivity 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 pointer to a FILE object that specifies an input stream.
Approach:
- It first, reads the count number of objects, each i 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 copy-able, so the behavior is undefined and if the value of size or count is equal to zero, then this programme volition only return 0.
C++
#include <stdio.h>
#include <stdlib.h>
#include <cord.h>
struct
Class {
char
cname[30];
char
sdate[30];
};
int
chief()
{
FILE
* of;
of =
fopen
(
"test.txt"
,
"w"
);
if
(of == NULL) {
fprintf
(stderr,
"\nError to open the file\n"
);
exit
(i);
}
struct
Course inp1 = {
"Algorithms"
,
"30OCT"
};
struct
Course inp2 = {
"DataStructures"
,
"28SEPT"
};
struct
Course inp3 = {
"Programming"
,
"1NOV"
};
fwrite
(&inp1,
sizeof
(
struct
Class),
1, of);
fwrite
(&inp2,
sizeof
(
struct
Course),
1, of);
fwrite
(&inp3,
sizeof
(
struct
Course),
i, of);
if
(
fwrite
!= 0)
printf
(
"Contents to file written successfully !\n"
);
else
printf
(
"Error writing file !\n"
);
fclose
(of);
FILE
* inf;
struct
Grade inp;
inf =
fopen
(
"exam.txt"
,
"r"
);
if
(inf == Aught) {
fprintf
(stderr,
"\nError to open the file\n"
);
go out
(1);
}
while
(
fread
(&inp,
sizeof
(
struct
Course),
1, inf))
printf
(
"Course Name = %s Started = %southward\northward"
,
inp.cname, inp.sdate);
fclose
(inf);
}
Output:
Source: https://www.geeksforgeeks.org/c-program-to-read-contents-of-whole-file/
Post a Comment for "C Easiest Way to Read in File to String"