我正在尝试使用“point%d%d”等格式匹配行。所以我只需要两个这两个整数,然后“点”在格式字符串中被硬编码。据我所知,阅读scanf的Linux手册页,这应该可以正常工作。
下一个代码,我想要使用的方式,第一次调用scanf工作,但是下一次调用scanf返回错误代码并且从不从stdin中获取更多数字(scanf不会阻止等待更多输入来自标准输入):
for (;;)
{
scanf("point %d %d", &x, &y);
printf("=> point %d %d\n", x, y);
}
通过这种方式,一切都按预期工作:
int x, y;
char s[10];
for (;;)
{
scanf("%s %d %d", s, &x, &y);
printf("=> point %d %d\n", x, y);
}
关于我可能误解的任何建议?
感谢。
答案 0 :(得分:3)
仍然存在未使用的数据,例如stdin
中的行尾字符,这些数据会使即将进行的扫描因不匹配而停止。在第二个版本中,此行尾数据被%s
消耗。
我建议您fgets
先缓冲到缓冲区然后再sscanf
。并检查您的返回值。
答案 1 :(得分:1)
我的猜测是你没有给它正确的输入。例如,此输入将不起作用:
4 5
这应该有效:
point 4 5
您没有提及错误代码,但可能是说您没有正确遵循格式(即在数字前放置点)。
答案 2 :(得分:0)
作为一种优秀的编程习惯,您应该在从用户那里获取输入之前刷新标准输入。