C getchar()在终端中正常工作但不在CLION

时间:2016-10-25 21:32:19

标签: c clion

下面的代码应首先提示&#34;键入一封信:&#34;。按下输入后,输出应显示&#34;您键入:<achar>.&#34;

我正在使用Jet Brains IDE,CLion。昨天代码如上所述工作。然而,今天,当我运行代码时,我得到一个空白行。如果按下一个键然后按Enter键,我会得到输出:

Letter: You typed: <achar>

但是,如果我在&#34之后输入\ n;键入一个字母:&#34;,则提示显示但是由于\ n而在下一行输出按下的键。

我已将确切的代码复制到.c文件中,编译并在终端中运行它并按预期运行。

#include <stdio.h>

int main() {
    int c;
    printf("Type a letter: "); // works if \n used, but jumps to next line when key pressed
    c = getchar();
    printf("You typed: %c\n", c);
    return (0);
}

2 个答案:

答案 0 :(得分:3)

终端被缓冲。 printf("Type a letter: ");如果printf包含换行符('\n'),则会打印出来。如果没有换行符,您可以通过调用fflush(stdout);强制执行printf,否则printf会在打印前等待缓冲区已满。
请注意,不应将输入流刷新为fflush(stdin);

答案 1 :(得分:0)

之所以发生这种情况,是因为在您输入一个字母并点击ENTER后,您实际上有了您的信件(例如:A)和新行(\n)字符。这意味着您需要清理缓冲区。

尝试以下方法:

    #include <stdio.h>

int main(void) {
    int c;
    printf("Type a letter: "); // works if \n used, but jumps to next line when key pressed
    while((c = getchar()) != 0 && c != '\n' && c != EOF);

    printf("You typed: %c\n", c);
    return 0;
}