4

我正在尝试使用“point %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);
    }

关于我可能会误解什么的任何建议?

谢谢。

4

3 回答 3

3

仍有未使用的数据(例如行尾字符)stdin使即将进行的扫描因不匹配而停止。在第二个版本中,这个行尾数据被%s.

我建议你fgets先缓冲然后再缓冲sscanf。并检查您的返回值。

于 2009-07-02T14:37:07.820 回答
1

我的猜测是你没有给它正确的输入。例如,此输入将不起作用:

4 5

这应该有效:

point 4 5

您没有提到错误代码,但可能是说您没有正确遵循格式(即在数字前加上点)。

于 2009-07-02T14:21:54.280 回答
0

作为一种良好的编程习惯,您应该在从用户获取输入之前刷新标准输入。

于 2009-07-02T15:25:34.963 回答