【问题标题】:Trying to understand getchar() behaviour试图理解 getchar() 行为
【发布时间】:2020-12-09 15:34:56
【问题描述】:

以下代码打印输出(ch is not E)两次。知道为什么吗?

#include<stdio.h>
void main()
{
    while ( getchar() != 'E') {
        printf("ch is not E\n");
    }
}

【问题讨论】:

标签: c getchar


【解决方案1】:

几乎可以肯定是因为您输入了一个不是 E 的字符,然后按了 ENTER 键,它本身就是另一个字符 \n,换行符。

这是因为 C 通常在“熟”模式下运行,在该模式下,在整行准备好之前,不会将击键传递给应用程序。您可以切换到立即传递字符的原始模式,但您必须自己管理退格键或行编辑等操作。请记住,cooked/raw 模式不是 C 本身的固有特性,而是底层环境的一部分。

如果您输入 abc,您会看到 行表明它不是 E

【讨论】:

  • 谢谢。这就解释了。熟模式和生模式是我从这篇文章中学到的新东西。再次感谢。
【解决方案2】:

getchar() 返回输入缓冲区中的第一个字符,并将其从输入缓冲区中删除。但其他字符仍在输入缓冲区中(在您的示例中为 \n)。

#include<stdio.h>
void main()
{
    char c;
    while ((c = getchar()) != '\n' && c!= EOF && c != 'E') {
        printf("ch is not E\n");
    }
}

参考:Using getchar() on c gets the 'Enter' after input

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2023-03-17
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多