【问题标题】:Putting an enter key when getchar(); is executedgetchar() 时输入回车键;被执行
【发布时间】:2020-01-16 11:36:20
【问题描述】:
int main()
{
    int a;
    a = getchar();
    printf("%d", a);
}

output

10

这是当我编写这样的代码并在控制台上只敲击“输入”键时。击键“输入”效果 1. 在缓冲区中放入一个 '\n' 2. 将该值依次返回给 getchar(这是我对这种情况的理解)。怎么可能?这个结果就像按两次回车键。我找到了一个相关的问题getchar,但是我找不到可以帮助我理解的东西。

【问题讨论】:

  • 使用显示的代码,您不需要按两次回车键。终端应该将第一个识别为结束行并将“发送”(否则为空)行到您的程序。
  • @Some程序员老兄那你的意思是放任何一个键就足以让值'\n'返回到getchar?还是只输入键?
  • 如果您按 Enter 键,则换行符将是添加到输入缓冲区的唯一字符。
  • @Some 程序员老兄 好的,输入缓冲区有'\n',只需按下Enter 键,但变量a 有'\n' 吗?只需按下键Enter。不是吗?
  • 简化,终端将换行符写入程序输入缓冲区。您的程序(通过getchar 函数)从输入缓冲区读取换行符并将其写入a 变量。从终端或控制台,一直到操作系统、驱动程序和缓冲区,再到变量a,都是同一个换行符。

标签: c character newline stdin getchar


【解决方案1】:

这个结果相当于按了两次回车键。

这是getchar() 的行为,当它在stdin 中遇到换行符\n 时,会有什么不同。


int main()
{
    int a;
    a = getchar();
    printf("%d", a);
}

显示适当的输出:

10

当你输入一个“回车”键。


getchar() 等待输入,直到在stdin 中遇到换行符\n,然后返回字符值直到那一刻;如果 \n 是唯一遇到的字符,getchar() 将停止扫描并返回这个换行符,实际上这就是发生的情况。

在这种特殊情况下,您无需再次按“Enter”即可使getchar() 停止扫描。

【讨论】:

  • 你的答案是否打算首先按回车键发送缓冲区'\n',然后有人识别'\n'在缓冲区中,然后将'\n'返回给getchar?
  • @lev.1code getchar() 查找 stdin 中的字符,直到找到换行符 \n。如果遇到换行符,它将停止扫描并将字符值刷新到a,但将\n 留在缓冲区中。如果它只遇到\n,它将停止扫描并将这个换行符返回给a。无需输入第二个换行符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2014-03-21
  • 2015-04-01
  • 1970-01-01
  • 2012-05-07
相关资源
最近更新 更多