0

我一直在寻找一种方法来获取 2 个整数,用空格分隔,它们位于我要读取的文件的第一行。我考虑过使用

fscanf(file, "%d %d\n", &wide, &high);

但是它读取了文件中任何位置的 2 个整数,如果第一行的格式错误,则会给出错误的输出。我也尝试过使用

char line[1001];
fgets(line, 1000, file);

这似乎是最好的选择,除了它有多笨拙。它给我留下了一个最多有几百个空格的字符串,我必须从中提取我宝贵的整数,更不用说检查格式错误了。

肯定有比这更好的选择吗?我会接受任何解决方案,但最强大的解决方案(对我来说)似乎fscanf只是第一行。有什么办法吗?

4

2 回答 2

4

您可以捕获紧跟在 a 中的第二个数字之后的字符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.");
}

这是关于 ideone 的演示

于 2013-08-06T12:23:49.607 回答
0

这似乎是最好的选择,除了它有多笨拙。

不,它一点也不笨拙(除了你fgets()以错误的方式使用 size 参数......)。这是非常好的和惯用的。strtol()它的工作做得很好:

char line[LINE_MAX];
fgets(line, sizeof line, file);

char *endp;
int width = strtol(line, &endp, 10);
int height = strtol(endp, NULL, 10);
于 2013-08-06T12:18:33.910 回答