fscanf - 我不知道我在这里做错了什么
fscanf - I don't know what I'm doing wrong here
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");
}
}
我正在尝试读取的文件如下所示:
i 10
i 12
d 10
d 12
(character/integer 以制表符分隔)。我的输出是:
id: i, value: 10
bad input
id: i, value: 12
bad input
id: d, value: 10
bad input
id: d, value: 12
bad input
我做错了什么? "Bad input" 只应在文件格式不正确时打印。上面的文件演示了一个格式正确的文件。我不明白如何同时 r == 2
和 r != 2
(这两个条件都以某种方式满足)。
使用
while((r = fscanf(file, " %c\t%d", &id, &num)) != EOF) //Whitespace before %c
可能会解决您的问题。因为当你使用
fscanf(file, "%c\t%d", &id, &num)
然后它留下一个换行符,在下一次迭代中使用。
作为你的下一次迭代,你的 id
得到 \n
并且 num
得到字符。
但是当你在 %c
之前放置额外的白色 space 时,它告诉 fscanf()
忽略白色 spaces(包括制表符,space 或换行符) .
因此你的 fscanf()
得到两个参数(字符和数字)。
请更改
while ((r = fscanf(file, "%c\t%d", &id, &num)) != EOF) {
至
while ((r = fscanf(file, "%c\t%d\n", &id, &num)) != EOF) {
在 fscanf 的末尾添加 \n。
在您的文件中,行以 \n 终止。
在接下来的阅读中,它并不顺利。
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");
}
}
我正在尝试读取的文件如下所示:
i 10
i 12
d 10
d 12
(character/integer 以制表符分隔)。我的输出是:
id: i, value: 10
bad input
id: i, value: 12
bad input
id: d, value: 10
bad input
id: d, value: 12
bad input
我做错了什么? "Bad input" 只应在文件格式不正确时打印。上面的文件演示了一个格式正确的文件。我不明白如何同时 r == 2
和 r != 2
(这两个条件都以某种方式满足)。
使用
while((r = fscanf(file, " %c\t%d", &id, &num)) != EOF) //Whitespace before %c
可能会解决您的问题。因为当你使用
fscanf(file, "%c\t%d", &id, &num)
然后它留下一个换行符,在下一次迭代中使用。
作为你的下一次迭代,你的 id
得到 \n
并且 num
得到字符。
但是当你在 %c
之前放置额外的白色 space 时,它告诉 fscanf()
忽略白色 spaces(包括制表符,space 或换行符) .
因此你的 fscanf()
得到两个参数(字符和数字)。
请更改
while ((r = fscanf(file, "%c\t%d", &id, &num)) != EOF) {
至
while ((r = fscanf(file, "%c\t%d\n", &id, &num)) != EOF) {
在 fscanf 的末尾添加 \n。
在您的文件中,行以 \n 终止。 在接下来的阅读中,它并不顺利。