下面的代码应首先提示&#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);
}
答案 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;
}