我有以下输入:
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);
}
这可行吗,有没有更好的方法仅使用 scanf
?
最佳答案
如果输入格式正确 - 正如您对在线评委所期望的那样 - 您所拥有的模式有效。
对于示例输入和循环,直到并包括 '6'
的输入都将被消耗,而之后的换行符将被下一个 scanf
跳过打电话。
This is usuall all within a
while(1)
loop or something of the sort, how do I test forEOF
with the first scanf?
如果您没有测试用例的计数,并且需要自己检测输入的结束,请使用 scanf
的返回值,
while(scanf("%d", &x) == 1) {
for(f = 0; f < x; ++f) {
scanf("%d%d", &a, &b);
/* do something clever */
}
}
当转换失败时,您已到达输入末尾、输入格式错误或输入流已损坏。在这些情况下您都无法恢复。
关于c - 解析 C 中的输入,scanf 的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290540/