【问题标题】:C getchar() works properly in terminal but not CLionC getchar() 在终端中正常工作,但在 CLion 中不能正常工作
【发布时间】:2016-10-26 05:55:52
【问题描述】:

下面的代码应该首先提示“键入一个字母:”。按下回车后,输出应显示“您输入:<achar>.

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

Letter: You typed: <achar>

但是,如果我在“键入一个字母:”之后放了一个 \n,则提示会显示,但由于 \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);
}

【问题讨论】:

  • 那行得通。但为什么?我认为刷新正在清除使用的内存。但是为什么终端没有问题?如果可以的话,把它作为一个解释的答案,我会把它标记为已回答。谢谢!

标签: c clion


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是因为在您键入一个字母并按 ENTER 后,您实际上有您的字母(例如:A)和换行符(\n)。这意味着您需要清理 Buffer。

    尝试以下方法:

        #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;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-06-13
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 2013-06-29
      • 2021-06-28
      • 2021-05-07
      相关资源
      最近更新 更多