所以在代码中,我正在读来自用户的选项,然后再决定是否执行规定动作以下位:如何停止输入字符卡在缓冲区中? ç
printf("Do you want to execute %s: ", exe);
char input = getchar();
if (input == 'y') {
return execute(exe);
} return 0;
我遇到的问题是该行char input = getchar()
一个字符后(我假设输入密钥或换行符)卡在stdin
中,并且从我的函数调用fgets()
(从stdin
读取)将消耗此卡住的字符,并且不会提示用户输入所需的内容。
现在我可以定义下面的函数来“吃”的任何杂散字符我,如果调用之前调用...
void iflush() {
int c;
while ((c = getchar()) != EOF && c != '\n') {
continue;
}
}
...这解决了这个问题。但我仍然想知道为什么这首先发生?是否有更合适的方式从得到没有造成这种流浪的性格,然后弄乱我的其他方法?我对C很陌生,很想确定我正在学习良好的习惯。
看起来很奇怪,我不得不添加一个辅助方法,即使很简单,以防止我的程序中的错误只是记录一些用户输入。我试过使用fgetc()
也是同样的问题。
你试过'fflush(stdin);'在你调用'getchar()'的语句之后? – VHS
是啊,没有做任何事情 – transiti0nary
@VHS你知道这是一个非常糟糕的建议吗? 'fflush(stdin);'调用未定义的行为。 –