题
我试图包含“点%d%d”的格式相匹配线。所以我只需要其中的两个两个整数,那么“点”是硬编码格式的字符串。据我所知读scanf函数的Linux手册页,这应该正常工作。
下面的代码,我想用,第一次调用scanf的作品,但在未来的呼叫SCANF与返回一个错误代码并且永远不要从标准输入更多的数字(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);
}
什么可能我误解任何建议?
感谢。
解决方案
有仍然未消耗的数据,诸如在stdin
结束行字符,使即将到来的扫描停止与非匹配。在第二个版本结束行该数据得到由%s
消耗。
我建议你fgets
到缓冲器,然后sscanf
它。并做检查返回值。
其他提示
我的猜测是,你不给它适当的输入。例如该输入将不起作用:
4 5
此应该工作:
point 4 5
您没有提到的错误代码,但它可能是说你没有正确按照格式(即放点号码之前)。
作为一个良好的编程实践,则应该从用户采取输入之前冲洗标准输入。
不隶属于 StackOverflow