C getchar()在terminal中正常工作,但在CLion中不能正常工作

C getchar()在terminal中正常工作,但在CLion中不能正常工作,c,clion,C,Clion,下面的代码应首先提示“键入字母:”。按下enter键后,输出应显示“您键入的:” 我用的是喷气式飞机,克莱恩。昨天,代码如上所述工作。然而,今天,当我运行代码时,我得到一个空行。如果按下一个键,然后按enter键,我会得到输出: Letter: You typed: <achar> 信函:您键入了: 但是,如果我在“键入字母:”后加了一个“\n”,则提示会显示,但会在下一行输出所按的键,因为“\n” 我已经将精确的代码复制到一个.c文件中,在终端中编译并运行它,它按预期运行 #i

下面的代码应首先提示“键入字母:”。按下enter键后,输出应显示“您键入的:

我用的是喷气式飞机,克莱恩。昨天,代码如上所述工作。然而,今天,当我运行代码时,我得到一个空行。如果按下一个键,然后按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是清除已用内存。但为什么终端没有问题?如果可以的话,把这个作为一个答案并解释一下,我会把它标记为已回答。谢谢