所以在代碼中,我正在讀來自用戶的選項,然後再決定是否執行規定動作以下位:如何停止輸入字符卡在緩衝區中? ç
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);'調用未定義的行爲。 –