while (1) {
printf("Integer? ");
int ret=scanf_s("%f", &n);
if (ret == 0) {
printf("char!\n");
continue;
}
if (ret==1 && n != (int)n) {
printf("float!\n");
continue;
}
printf("OK\n");
}
此程式片段是希望判斷輸入是否為整數,若是整數則顯示ok。
輸入整數和浮點數都沒有問題,但是輸入字元卻出現無窮迴圈><
想請問該如何解決,謝謝!
當使用者輸入錯誤的格式時, scanf 並不會把緩衝區內的資料拿掉
導致下次再跑到 scanf 時緩衝區還有資料
程式會認為使用者有輸入,就產生無窮迴圈了
可以利用 getchar 把緩衝區內的資料拿掉:
int ret;
float n;
while (1) {
printf("Integer? ");
ret=scanf("%f", &n);
if (ret == 0) {
printf("char!\n");
while(getchar()!='\n');
continue;
}
if (ret==1 && n != (int)n) {
printf("float!\n");
continue;
}
printf("OK\n");
}
因為你指定要數字但是電腦找不到數字吧,
通常都是先看作文字然後再去判斷.