【发布时间】:2016-05-04 11:34:26
【问题描述】:
我目前正在开发一个简单的 C 应用程序。它将单个文件作为命令行参数,其格式如下:
1,2,3
4,5,6
7,8,9
etc.
但是,无论出于何种原因,fscanf 从不扫描数字!这是一个例子:
#include <stdio.h>
int main(int argc, char **argv) {
FILE *file = fopen(*argv, "r");
int i1, i2, i3;
while (fscanf(file, "%d,%d,%d", &i1, &i2, &i3) == 3) {
printf("Doing stuff with %d, %d, and %d...\n", i1, i2, i3);
}
fclose(file);
return 0;
}
如果您使用文件名作为参数运行它,那么它会立即退出,因为fscanf 返回 0。我已经尝试了几种变体,但无济于事。如何让fscanf 正确读取数字?
【问题讨论】:
-
fopen(*argv, "r")-->fopen(*++argv, "r")或fopen(argv[1], "r") -
为什么不检查
fopen()的返回值? -
@BLUEPIXY facepalm 你能把它作为答案发布吗?
-
@LegionMammal978 不要假设。检查并确定。 :)
-
@SouravGhosh 虽然你有一个一般性的观点——对于chrissake,总是检查返回值! ——,在这里没用!该程序可以打开
argv[0]好吧,可惜在特殊情况下它只能从这些字节中扫描三个逗号分隔的数字;-)。
标签: c scanf format-specifiers