代码之家  ›  专栏  ›  技术社区  ›  Jaebum

scanf()是如何工作的?

  •  4
  • Jaebum  · 技术社区  · 15 年前

    在Windows上,

    char c;
    int i;
    
    scanf("%d", &i);
    scanf("%c", &c);
    

    计算机跳过从控制台检索字符,因为\n'保留在缓冲区中。 但是,我发现下面的代码工作得很好。

    char str[10];
    int i;
    
    scanf("%d", &i);
    scanf("%s", str);
    

    正如上面的情况一样,“\n”仍在缓冲区中,但为什么scanf这次成功地从控制台获取字符串?

    2 回复  |  直到 15 年前
        1
  •  6
  •   terminus    15 年前

    从GCC手册页(我手边没有Windows):

    %C:总是匹配固定数量的字符。最大字段宽度表示 要读取的字符很多;如果不指定最大值,则默认值为1。它也不会跳过初始空白字符。

    %S:匹配一组非空白字符。 它跳过并丢弃初始值 空白,但当它在阅读某个内容后遇到更多空白时停止。 [本条款应解释你所看到的行为。]

        2
  •  2
  •   Martin    15 年前

    无法理解问题,但scanf忽略所有空白字符。 n 是空白字符。如果要检测用户何时按Enter,应使用fgets。

    fgets(str, 10, stdin);