C getchar()在terminal中正常工作,但在CLion中不能正常工作
下面的代码应首先提示“键入字母:”。按下enter键后,输出应显示“您键入的:C getchar()在terminal中正常工作,但在CLion中不能正常工作,c,clion,C,Clion,下面的代码应首先提示“键入字母:”。按下enter键后,输出应显示“您键入的:” 我用的是喷气式飞机,克莱恩。昨天,代码如上所述工作。然而,今天,当我运行代码时,我得到一个空行。如果按下一个键,然后按enter键,我会得到输出: Letter: You typed: <achar> 信函:您键入了: 但是,如果我在“键入字母:”后加了一个“\n”,则提示会显示,但会在下一行输出所按的键,因为“\n” 我已经将精确的代码复制到一个.c文件中,在终端中编译并运行它,它按预期运行 #i
”
我用的是喷气式飞机,克莱恩。昨天,代码如上所述工作。然而,今天,当我运行代码时,我得到一个空行。如果按下一个键,然后按enter键,我会得到输出:
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);
}
#包括
int main(){
INTC;
printf(“键入字母:”;//如果使用,则可以工作,\n但按此键时跳到下一行
c=getchar();
printf(“您键入的:%c\n”,c);
返回(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;
}
#包括
内部主(空){
INTC;
printf(“键入字母:”;//如果使用,则可以工作,\n但按此键时跳到下一行
而((c=getchar())!=0&&c!='\n'&&c!=EOF);
printf(“您键入的:%c\n”,c);
返回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;
}
#包括
内部主(空){
INTC;
printf(“键入字母:”;//如果使用,则可以工作,\n但按此键时跳到下一行
而((c=getchar())!=0&&c!='\n'&&c!=EOF);
printf(“您键入的:%c\n”,c);
返回0;
}
终端已缓冲<代码>打印(“键入字母:”)如果printf包含换行符('\n'
),则会打印它。如果没有换行符,可以通过调用fflush(stdout)强制printf代码>否则,printf将等待缓冲区满后再打印。
请注意,输入流不应作为fflush(stdin)刷新代码>终端已缓冲<代码>打印(“键入字母:”)
如果printf包含换行符('\n'
),则会打印它。如果没有换行符,可以通过调用fflush(stdout)强制printf代码>否则,printf将等待缓冲区满后再打印。
请注意,输入流不应作为fflush(stdin)刷新代码>有效。但是为什么呢?我认为flush是清除已用内存。但为什么终端没有问题?如果可以的话,把这个作为一个答案并解释一下,我会把它标记为已回答。谢谢成功了。但是为什么呢?我认为flush是清除已用内存。但为什么终端没有问题?如果可以的话,把这个作为一个答案并解释一下,我会把它标记为已回答。谢谢