我试图包含“点%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

您没有提到的错误代码,但它可能是说你没有正确按照格式(即放点号码之前)。

作为一个良好的编程实践,则应该从用户采取输入之前冲洗标准输入。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top