iT邦幫忙

0

C語言 判斷輸入為整數、浮點數或字元

c
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。
輸入整數和浮點數都沒有問題,但是輸入字元卻出現無窮迴圈><
想請問該如何解決,謝謝!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
淺水員
iT邦大師 6 級 ‧ 2020-02-05 12:10:19
最佳解答

當使用者輸入錯誤的格式時, 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");	

}
js050233 iT邦新手 5 級 ‧ 2020-02-19 22:03:09 檢舉

原來如此,太感謝了!

0
小魚
iT邦大師 1 級 ‧ 2020-02-05 07:45:14

因為你指定要數字但是電腦找不到數字吧,
通常都是先看作文字然後再去判斷.

js050233 iT邦新手 5 級 ‧ 2020-02-19 21:53:52 檢舉

當初有試過先以%c來收,卻變成收整數和字元正常,float卻有無窮迴圈,不知道有沒有辦法能一次判斷3種不同的情況?

小魚 iT邦大師 1 級 ‧ 2020-02-19 23:46:18 檢舉

C語言比較沒碰,
C++的話,
通常是可以用Enter作為判斷.
輸入Enter才算是輸入結束.

0
阿展展展
iT邦好手 1 級 ‧ 2020-02-05 07:56:13

%f 能吃字串嗎 /images/emoticon/emoticon19.gif

0

你沒有考量到出現null的情況對不對。

我要發表回答

立即登入回答