[英]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.