Reading strings, integers etc from files using fscanf

旧街凉风 提交于 2019-12-22 08:57:59

问题


I'd like your help with understanding how should I do the following:

I have a file that contains integers separated by spaces ' '. I need to read all integers, sort them and write them as a strings to another file. I wrote a code, but I read char by char, put the word in an char sub_arr [Max_Int] and when I met ' ', I put these chars, now one string, after atoi-ing it into another Main int array,until reaching the end of the file, string by string, and then I sorted and itoa-ing them and wrote them in another file.

But then I remembered that there's a fscanf function:I read about it and still I didn't understand completely what does it do and how to use it.

In my case, where all integers separated by space, can I write fscanf(myFile,"%s",word)? would it know not to consider ' ' and stop at the end of the specific string?! How?

More than that, Can I write fscanf(myFile,"%d",number) and it would give me the next number itself? (I must have misunderstood it. Feels like magic).


回答1:


You are right, fscanf can give you the next integer. However, you need to provide it with a pointer. Therefore, you need an & behind number:

fscanf(myFile, "%d", &number);

*scanf family of functions also automatically skip whitespace (except when given %c, %[ or %n).

Your loop with reading file will eventually look like this:

while (you_have_space_in_your_array_or_whatever)
{
    int number;
    if (fscanf(myFile, "%d", &number) != 1)
        break;        // file finished or there was an error
    add_to_your_array(number);
}

Side note: you may think of writing like this:

while (!feof(myFile))
{
    int number;
    fscanf(myFile, "%d", &number);
    add_to_your_array(number);
}

This, although looks nice, has a problem. If you are indeed reaching the end of file, you will have read a garbage number and added to your data before testing the end of file. That is why you should use the while loop I mentioned first.




回答2:


following lines will do your work, following lines will read single integer.

int number;
fscanf(myFile, " %d", &number);

Put it in a loop until end of file, and place the number in array.




回答3:


Try this:

#include <stdio.h>


int main(int argc, char* argv[])
{
    char name[256];
    int age;
    /* create a text file */
    FILE *f = fopen("test.txt", "w");
    fprintf(f, "Josh 25 years old\n");
    fclose(f);

    /* now open it and read it */
    f = fopen("test.txt", "r");

    if (fscanf(f, "%s %d", name, &age) !=2)
        ; /* Couln't read name and age */
    printf("Name: %s, Age %d\n", name, age);

}


来源:https://stackoverflow.com/questions/11543341/reading-strings-integers-etc-from-files-using-fscanf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!