AMH9
AMH9

Reputation: 179

fscanf doesn't read the first char of first word (in c)

I'm using fscanf function in a c code to read a file contains 1 line of words separated by white spaces, but for example if the first word is 1234, then when I print it the output is 234, however the other words in the file are read correctly, any ideas?

FILE* file = fopen(path, "r");

char arr = getc(file);

char temp[20];  

while(fscanf(file,"%s",temp)!= EOF && i<= column)
{
 printf("word %d: %s\n",i, temp);
}

Upvotes: 1

Views: 1863

Answers (4)

avr-girl
avr-girl

Reputation: 557

you can use rewind(file) after char arr = getc(file) to reset your file stream to the beginning.

Other example:

#include <stdio.h>

int main(void)
{
    FILE    *f;
    FILE    *r;
    char    str[100];
    size_t  buf;

    memset(str, 0, sizeof(str));
    r = fopen("in.txt", "r");
    f = fopen("out.txt", "w+b");
    fscanf(r, "%s", str);
    rewind(r); // without this, the first char won't be written
    buf = fread(str, sizeof(str), 1, r);
    fwrite(str, sizeof(str), 1, f);
    fclose(r);
    fclose(f);

    return (0);
}

Upvotes: 0

user3629249
user3629249

Reputation: 16540

Here is the posted code, with my comments

When asking a question about a run time problem, 
post code that cleanly compiles, and demonstrates the problem

FILE* file = fopen(path, "r");
// missing check of `file` to assure the fopen() was successful

char arr = getc(file);
// this consumed the first byte of the file, (answers your question)

char temp[20];  

while(fscanf(file,"%s",temp)!= EOF && i<= column)
// missing length modifier. format should be: "%19s"
// 19 because fscanf() automatically appends a NUL byte to the input
// 19 because otherwise the input buffer could be overrun,
//    resulting in undefined behaviour and possible seg fault event
// should be checking (also) for returned value == 1 
// this will fail as soon as an `white space` is encountered
// as the following call to fscanf() will not read/consume the white space
// suggest a leading space in the format string to consume white space
{
    printf("word %d: %s\n",i, temp);
    // the variable 'i' is neither declared nor modified
    //    within the scope of the posted code
}

Upvotes: 1

fatihk
fatihk

Reputation: 7919

char arr = getc(file);

reads the first character from the file stream and iterates the file stream file

Upvotes: 1

Kamal Palei
Kamal Palei

Reputation: 2012

char arr = getc(file);

Probably above line is causing to loose the first char.

Upvotes: 3

Related Questions