我一直在寻找一种获取2个整数的方法,这些整数由空格分隔,位于我要读的文件的第一行。我考虑过使用
fscanf(file, "%d %d\n", &wide, &high);
但是读取了文件中任何位置的2个整数,如果第一行的格式错误,则输出错误。我也尝试过使用
char line[1001];
fgets(line, 1000, file);
这似乎是最好的选择,除了它有多笨拙。它给我留下了一个最多有几百个空格的字符串,我必须从中提取我宝贵的整数,不要在格式化时检查错误。
当然有比这更好的选择吗?我会接受任何解决方案,但最强大的解决方案似乎(对我而言)仅在第一行是fscanf
。有办法吗?
答案 0 :(得分:4)
您可以在char
中紧跟第二个数字后捕获字符,并检查捕获的字符是否为'\n'
,如下所示:
int wide, high;
char c;
if (fscanf(file, "%d%d%c", &wide, &high, &c) != 3 || c != '\n') {
printf("Incorrect file format: expected two ints followed by a newline.");
}
答案 1 :(得分:0)
这似乎是最好的选择,除了它有多笨拙。
不,它根本不笨拙(除了你以错误的方式使用fgets()
的大小参数...)。它非常精致&地道。 strtol()
做得很好:
char line[LINE_MAX];
fgets(line, sizeof line, file);
char *endp;
int width = strtol(line, &endp, 10);
int height = strtol(endp, NULL, 10);