Reading file using fscanf() in C

249,190

Solution 1

First of all, you're testing fp twice. so printf("Error Reading File\n"); never gets executed.

Then, the output of fscanf should be equal to 2 since you're reading two values.

Solution 2

scanf() and friends return the number of input items successfully matched. For your code, that would be two or less (in case of less matches than specified). In short, be a little more careful with the manual pages:

#include <stdio.h>
#include <errno.h>
#include <stdbool.h>

int main(void)
{
    char item[9], status;

    FILE *fp;

    if((fp = fopen("D:\\Sample\\database.txt", "r+")) == NULL) {
        printf("No such file\n");
        exit(1);
    }

    while (true) {
        int ret = fscanf(fp, "%s %c", item, &status);
        if(ret == 2)
            printf("\n%s \t %c", item, status);
        else if(errno != 0) {
            perror("scanf:");
            break;
        } else if(ret == EOF) {
            break;
        } else {
            printf("No match.\n");
        }
    }
    printf("\n");
    if(feof(fp)) {
        puts("EOF");
    }
    return 0;
}

Solution 3

fscanf will treat 2 arguments, and thus return 2. Your while statement will be false, hence never displaying what has been read, plus as it has read only 1 line, if is not at EOF, resulting in what you see.

Share:
249,190
Guru
Author by

Guru

Updated on July 05, 2022

Comments

  • Guru
    Guru almost 2 years

    I need to read and print data from a file.
    I wrote the program like below,

    #include<stdio.h>
    #include<conio.h>
    int main(void)
    {
    char item[9], status;
    
    FILE *fp;
    
    if( (fp = fopen("D:\\Sample\\database.txt", "r+")) == NULL)
    {
        printf("No such file\n");
        exit(1);
    }  
    
     if (fp == NULL)
    {
        printf("Error Reading File\n");
    }
    
    while(fscanf(fp,"%s %c",item,&status) == 1)  
    {  
           printf("\n%s \t %c", item,status);  
    }  
    if(feof(fp))  
    {            
             puts("EOF");     
    }  
    else  
    {  
     puts("CAN NOT READ");  
    }  
    getch();  
    return 0;  
    }  
    

    the database.txt file contains
    Test1 A
    Test2 B
    Test3 C

    When I run the code, it prints

    CAN NOT READ.

    Please help me to find out the problem.