c - 一种仅在第一行进行 fscanf 的方法

标签 c fgets scanf

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

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

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

字符行[1001];
fgets(行, 1000, 文件);

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

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

最佳答案

您可以捕获紧跟在 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 .

关于c - 一种仅在第一行进行 fscanf 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18079894/

相关文章:

c++ - 创建最小化重叠窗口 (Win32)

c - fgets() 在 fscanf() 之后不起作用

c - 如何用scanf()读取一句char指针?

c++ - 是否可以将 int 添加到 pair 中?

c - 循环客户端到服务器

C fgets 会跳过用户输入,即使在刷新缓冲区时也是如此

C:使用 strcmp

c - 我应该分解 long scanf 以使其易于维护吗?

c - 为什么 scanf 函数会自动获取先前的 '\n' 值以及如何逃脱此事件?

c# - 将 C 中的外部 DLL 附加到 c# 中的 WinForm 项目