scanf格式的硬编码字符串

时间:2009-07-02 14:13:25

标签: c scanf

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

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

感谢。

3 个答案:

答案 0 :(得分:3)

仍然存在未使用的数据,例如stdin中的行尾字符,这些数据会使即将进行的扫描因不匹配而停止。在第二个版本中,此行尾数据被%s消耗。

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

答案 1 :(得分:1)

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

4 5

这应该有效:

point 4 5

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

答案 2 :(得分:0)

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