仅在第一行上使用fscanf的方法

时间:2013-08-06 12:14:59

标签: c fgets scanf

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

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

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

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

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

当然有比这更好的选择吗?我会接受任何解决方案,但最强大的解决方案似乎(对我而言)仅在第一行是fscanf。有办法吗?

2 个答案:

答案 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.");
}

这是demo on ideone

答案 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);