【问题标题】:How does scanf() really work?scanf() 是如何工作的?
【发布时间】:2010-01-18 11:45:43
【问题描述】:

在 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 成功地从控制台获取了字符串?

【问题讨论】:

  • 这里需要更多输入。你在控制台输入什么?你想让它得到什么?上面的代码没有理由不能按预期工作,但这取决于预期的内容。

标签: c scanf stdio


【解决方案1】:

来自 gcc 手册页(我手边没有 Windows):

%c:总是匹配固定数量的字符。最大字段宽度说明如何 许多字符要阅读;如果不指定最大值,则默认为 1。它也不会跳过初始空白字符。

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

【讨论】:

    【解决方案2】:

    无法理解问题,但 scanf 会忽略所有空白字符。 n 是一个空白字符。如果你想检测用户何时按下回车,你应该使用 fgets。

    fgets(str, 10, stdin);
    

    【讨论】:

    • sry for bad eng :( 我想我应该使用“get”而不是“retrieve”。我只是混淆了含义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多