當我想檢查輸入的是數字時,遇到了這個問題。如果我成功輸入一個數字,scanf函數將返回1。所以這裏是我寫的:當你輸入12ab到scanf(「%d」,&argu)時,會發生什麼?
int argu;
while(scanf("%d",&argu)!=1){
printf("Please input a number!\n");
}
但是當我輸入像abcd這樣的東西,循環會永遠不會停止提示。
我在網上查了一下,發現它與緩存有關,我需要清理它,以便scanf可以獲取新數據。所以我嘗試了fflush,但沒有奏效。
然後我看到了這一點:
int argu,j;
while(scanf("%d",&argu)!=1){
printf("Please input a number!\n");
while((j=getchar())!='\n' && j != '\n');
}
然後當像「ABCD」我輸入的東西它的工作好,它提示我輸入。但是當我輸入像'12ab'這樣的東西時,它不會再工作。
那麼有沒有一種方法可以檢查scanf的輸入(「%d」,& arguments)實際上是一個數字,並提示輸入另一個輸入,如果它不是?
編輯:
我看到了答案,並通過使用while(*eptr != '\n')
解決我的問題。
請注意,fgets
函數實際上讀取數組'\ n',並且fget
沒有。所以要小心。
使用像fgets(s,10,stdin)的代碼? – Gnijuohz
謝謝!我不知道斯托爾。學到了很多! – Gnijuohz
對不起,你能解釋一下if(eptr == NULL ||!isspace(* eptr))嗎?當使用你提供的代碼時,像'12 34'這樣的輸入被接受,但它們不應該是。當我輸入'1234'eptr會指出什麼,'12ab'和'12 34'怎麼樣? – Gnijuohz