C++ How to Use a Loop to Read From a File

C programming language supports 4 pre-divers functions to read contents from a file, defined in stdio.h header file:

  1. fgetc() This function is used to read a single character from the file.
  2. fgets() This function is used to read strings from files.
  3. fscanf() This function is used to read the block of raw bytes from files. This is used to read binary files.
  4. 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 role fclose().

Let's begin discussing each of these functions in detail.

fgetc()

fgetc() reads characters pointed past the function arrow at that time. 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 (-i) 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 volition read character until it reaches and of file.
  • When it reaches end it returns  EOF character (-one).

Using EOF:
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 \n" );

}

printf ( "content of this file are \north" );

do {

ch = fgetc (ptr);

printf ( "%c" , ch);

} while (ch != EOF);

fclose (ptr);

render 0;

}

Input File:

GeeksforGeeks | A informatics portal for geeks

Output:

output fgetc

In the above code, the approach is to read one grapheme from the file and check if it is non EOF, if it is not then print it and if it is so stop reading.

Using feof():
feof() function takes file arrow every bit statement and returns truthful if pointer reaches the end of the file.

Syntax:

int feof(FILE *ptr);

Arroyo:

  • In this arroyo, a character is read using fgetc().
  • Using feof() function cheque for end of file. since feof() returns true after it reaches the end.
  • Use logical NOT operator(!) and then that when it reaches terminate status become false and loop end.

Below is the C program to implement the above arroyo:

C

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int primary()

{

FILE * ptr;

char ch;

ptr = fopen ( "examination.txt" , "r" );

if (NULL == ptr) {

printf ( "file tin't exist opened \northward" );

}

printf ( "content of this file are \n" );

while (! feof (ptr)) {

ch = fgetc (ptr);

printf ( "%c" , ch);

}

fclose (ptr);

render 0;

}

Input File:

GeeksforGeeks | A information science portal for geeks

Output:

output feof

fgets()

fgets() reads one string at a fourth dimension from the file. fgets() returns a string if it is successfully read past role or returns NULL if tin 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: Information technology is maximum characters to read from stream.
ptr: It is file pointer.

Arroyo:

  • In this arroyo, the contents of the file are read one character at a time until we attain the terminate of the file.
  • When we reach the end of the file fgets() can't read and returns NULL and the program will cease reading.

Below is the C program to implement the higher up approach:

C

#include <stdio.h>

#include <stdlib.h>

#include <cord.h>

int main()

{

FILE * ptr;

char str[50];

ptr = fopen ( "test.txt" , "a+" );

if (Zero == ptr) {

printf ( "file can't be opened \n" );

}

printf ( "content of this file are \n" );

while ( fgets (str, 50, ptr) != NULL) {

printf ( "%due south" , str);

}

fclose (ptr);

return 0;

}

Input File:

GeeksforGeeks | A information science portal for geeks

Output:

Output fgets

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 panel till the terminate 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 %*s %south " ,

buf)

== 1)

printf ( "%due south\n" , buf);

return 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 pointer to a block of memory with a minimum size of size*nmemb bytes.
size: This is the size in bytes of each chemical 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.

Approach:

  • It first, 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, then the behavior is undefined and if the value of size or count is equal to zero, so this plan volition but return 0.

C++

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct Form {

char cname[thirty];

char sdate[thirty];

};

int main()

{

FILE * of;

of = fopen ( "examination.txt" , "w" );

if (of == Nothing) {

fprintf (stderr,

"\nError to open the file\n" );

exit (1);

}

struct Grade inp1 = { "Algorithms" ,

"30OCT" };

struct Class inp2 = { "DataStructures" ,

"28SEPT" };

struct Grade inp3 = { "Programming" ,

"1NOV" };

fwrite (&inp1, sizeof ( struct Course),

1, of);

fwrite (&inp2, sizeof ( struct Class),

1, of);

fwrite (&inp3, sizeof ( struct Course),

one, of);

if ( fwrite != 0)

printf ( "Contents to file written successfully !\n" );

else

printf ( "Error writing file !\n" );

fclose (of);

FILE * inf;

struct Class inp;

inf = fopen ( "test.txt" , "r" );

if (inf == NULL) {

fprintf (stderr,

"\nError to open the file\north" );

leave (1);

}

while ( fread (&inp, sizeof ( struct Grade),

one, inf))

printf ( "Course Name = %s Started = %southward\n" ,

inp.cname, inp.sdate);

fclose (inf);

}

Output:

output fread


sandersgrater80.blogspot.com

Source: https://www.geeksforgeeks.org/c-program-to-read-contents-of-whole-file/

0 Response to "C++ How to Use a Loop to Read From a File"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel