2

我有以下输入:

2
2 5
4 6
1
1 1

其中每个第一个数字编码要遵循的案例数。这在 ACM 问题中很常见。我已经尝试使用fgets然后成功地做到这sscanf一点(无论如何我总是最终这样做:(,但出于好奇,有没有办法只使用scanf?如果我做类似的事情,文件指针会在哪里结束

scanf("%d",&x)
for (f=0;f<x;f++) {
  scanf("%d %d", &a, &b);
}

那行得通吗,有没有更好的方法使用 just scanf

4

1 回答 1

2

如果输入格式正确 - 正如您对在线评委所期望的那样 - 您拥有的模式是有效的。

对于示例输入和循环,直到并包括的输入'6'将被消耗,之后的换行符将被下一次scanf调用跳过。

这通常都在一个while(1)循环或类似的东西中,我如何EOF使用第一个 scanf 进行测试?

如果您没有测试用例的计数并且需要自己检测输入的结束,请使用的返回值scanf

while(scanf("%d", &x) == 1) {
    for(f = 0; f < x; ++f) {
        scanf("%d%d", &a, &b);
        /* do something clever */
    }
 }

当转换失败时,您已到达输入结尾、输入格式错误或输入流已损坏。在这些情况下,您都无法康复。

于 2013-04-30T01:02:53.083 回答