說我有下面的代碼段清潔標準輸入緩衝區的問題
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main() {
char choice;
char name[5] = "";
do {
printf("a = new name or anything else to quit\nChoice: ");
choice = getchar();
//not doing any error handling....assuming you only click 'a'
switch (choice) {
case 'a':
getchar();
printf("Enter a name which is 4 characters or less: ");
fgets(name, 5, stdin);
printf("Name: %s\n", name);
char c;
while ((c = getchar()) != '\n' && c != EOF);
printf("%c", c);
c = '\0';
break;
default:
break;
}
} while (choice == 'a');
printf("Ending.....press enter now");
getchar();
return 0;
}
什麼,我試圖在這裏的測試是清除緩衝區時,我有4個以上的字符輸入到。它可以正常工作,只要我有一個4字符或更多的名字,但是當我輸入3個字符或更少時,問題就變成了while循環。它期望來自stdin緩衝區的getchar(),但是這是空的。有什麼辦法解決這個問題?
我真的不明白你問的是什麼,但getchar()返回int,而不是char。你似乎正在尋找最多5個字符後看到換行符,這似乎是好的,但我會使用fgetc而不是getchar(),只是因爲你使用fgets,並且如果由於某種原因getchar()不使用相同緩衝區作爲fgets(),然後所有投注都關閉。另外,我認爲fgets不必null來終止字符串,所以你可能想在那裏傳遞4而不是5,然後設置name [4] ='\ 0';之後。這可能會對您有所幫助,或者您可能想要重新提出問題。 – Alex
我輸入名稱「abc」,例如.....名稱[3]中存儲的內容將是'\ n'。現在,因爲此時緩衝區中沒有任何內容,while循環將從空緩衝區中獲取getchar(),這意味着我卡在那裏。 –