我試圖讓用戶輸入一個數字多少次(併爲每個數字創建一個鏈接列表節點)。scanf/getchar只能通過循環第一次正常工作?
但是,我試過清除字符輸入緩衝區的多種方法,但無濟於事。奇怪的是,代碼將執行一次,但不會正確執行第二個。
例如,用下面的代碼,終端讀取:
would you like to enter an integer?
y
Enter an integer: 4
would you like to enter an integer?
y
**program terminates**
我用時之前我不會甚至能夠在最後一行輸入「Y」。它剛剛結束。
struct node *read_numbers(void){
struct node *first = NULL;
int n; char yesno;
yesno = 'y';
while(yesno == 'y'){
printf("Would you like enter an integer ((y) for yes/(n) for no):\n");
yesno = getchar();
while(getchar() != '\n');
if(yesno == 'y'){
printf("Enter an Integer:");
scanf(" %d", &n);
first = add_to_list(first, n);
} else {
return first;
}
} // end while
}
我讀到了字符輸入和緩衝區,並且據說getchar()方法應該可以工作。我用錯了嗎?我也在「%c」之前和之後嘗試使用scanf()和額外的空格,但無濟於事。
工作!爲什麼我需要'while(getchar()!='\ n');''scanf()'之後'if,呃...我正在使用'scanf()'(vs'getchar()')? – LazerSharks
@Gnuey,因爲scanf將掃描字符串直到找到空白字符,但該字符將留在讀取緩衝區中。 getchar()從該緩衝區中讀取數據,以便它讀取你的換行符並離開while循環。 scanf笨重。大多數人使用fgets + sscanf來做你的代碼 – Guillaume
啊,我明白了。謝謝! – LazerSharks