char id;
int num, r;
if (argc != 2) {
printf("error\n");
exit(1);
}
FILE *file = fopen(argv[1], "r");
if (file == NULL) {
printf("error\n");
exit(1);
}
while ((r = fscanf(file, "%c\t%d", &id, &num)) != EOF) {
if(r == 2) {
printf("id: %c, value: %d\n", id, num);
}
else if (r!=2) {
printf("bad input\n");
}
}
我试图阅读的文件如下:
我10
我12
d 10
d 12
(字符/整数以制表符分隔)。我的输出是:
id:i,价值:10
错误输入
id:i,价值:12
错误输入
id:d,值:10
错误输入
id:d,值:12
错误输入
我做错了什么? "糟糕的输入"如果文件格式不正确,只应打印。上面的文件演示了格式正确的文件。我不能同时理解r == 2
和r != 2
的方式(两种条件都以某种方式得到满足)。
答案 0 :(得分:4)
使用
while((r = fscanf(file, " %c\t%d", &id, &num)) != EOF) //Whitespace before %c
可能会解决您的问题。因为当你使用
fscanf(file, "%c\t%d", &id, &num)
然后它留下一个在下一次迭代中消耗的换行符。
在您的下一次迭代中,id
获取\n
和num
即可获得该字符。
但是当你在%c
之前加上额外的空格,告诉fscanf()
忽略空格(包括Tab,空格或换行符)。
因此,fscanf()
获得两个参数(字符和数字)。
答案 1 :(得分:2)
请更改
while ((r = fscanf(file, "%c\t%d", &id, &num)) != EOF) {
到
while ((r = fscanf(file, "%c\t%d\n", &id, &num)) != EOF) {
在fscanf中添加\ n。
在您的文件中,行以\ n结束。 在下一次阅读中,它并不顺利。