繁体   English   中英

C中的Fscanf用于存储文件中的数据

[英]Fscanf in C for storing data from file

这是我的代码。

#include<stdio.h>

struct element {
    int value;
    char activity;
};

typedef struct element element;

int main(int argc,char** argv) {
    FILE* fp;
    fp = fopen(argv[1], "r");

    element a;

    while(feof(fp) == 0) {
        fscanf(fp, "%c %d", &a.activity, &a.value);

        printf("\n%d", a.value);
    }
}

现在,它两次向我输出文件上的每个整数。

我如何得到这个奇怪的答案?

我的结构是:

struct element {
    int value;
    char activity;
};

typedef struct element element;

而我的输入文件是:

i 23
i 56
i 19
i 20
i 44

看一下你的fscanf模式:

fscanf(fp, "%c,%d", &a.activity, &a.value);

然后以您的文件格式:

i 23
i 56
i 19
i 20
i 44

我看不到逗号。 请尝试使用空格,并确保将换行符考虑在内:

fscanf(fp, "%c %d\n", &a.activity, &a.value);

请记住, fscanf不仅按顺序读取值,还尊重通配符周围的固定字符。

编辑-同样重要,Keith在评论中指出:

请注意,在fscanf格式字符串中使用\\n可能会引起误解。 任何空格字符(包括\\n )都与零个或多个空格字符匹配。 因此,添加\\n对于给定的输入有效-但如果输入全部都在由空格或制表符分隔的一行上,则也将起作用: i 23 i 56 i 19 i 20 i 44 如果您确实需要面向行的输入,请使用fgets() (而不是gets() )一次将一行读入字符串,然后使用sscanf()解析该字符串。 (不过,所有*scanf()函数都存在数字溢出问题。)

希望能帮助到你!

(PS:哦,我已经解决了您的代码格式问题。下次您发布代码时,请花一点时间来确保代码看上去正确地缩进并填充内容。看到凌乱的代码段有点带走了回答的欲望,您会得到的好处就更少了反馈您的问题!)

直到fscanf第一次返回时,活动a.activity初始化。 在调试时,请记住这一点。 大多数调试器会将“游标”放在尚未执行的第一行; 因此,第一次突出显示fscanf行时, a.activity尚未初始化,并且可能根本没有任何值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM