[問題] 判斷是否輸入一正整數 整數後無任意字元

看板C_and_CPP (C/C++)作者 (九命)時間16年前 (2010/05/19 20:44), 編輯推噓3(3015)
留言18則, 4人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 我想要讓USER輸入單一正整數(未限定是幾位數), 如果不是正整數,是 A狀況 浮點數 EX:5.5 B狀況 字元/字串/符號 EX:一/一二三/** C狀況 整數後加了其他東西 EX:5*/5哀 時,就跳錯誤訊息給USER看。 目前,只能做到AB狀況達成,可是C狀況想不出來要怎麼做, 似乎應該從判斷有無溢位下手? 可是我不知道要怎麼弄QQ PS 我最後一定要轉成數值,因為這只是我要拿來用在別的程式的一小段東西。 (死腦經堅持要USER輸入單一正整數,不是就不跑的人……) 目前的程式碼: int main() { printf("2010.05.18 white 「判斷輸入值是否為正整數」\n"); int i; float f; if(scanf("%f",&f))//判斷是不是數值 { if(f-(int)f==0)//判斷是不是整數 { i=f;//丟到整數裡 if(i>=0)//因為前面沒有判斷是不是正整數,所以再加這 printf("%d是整數\n",i); else printf("%f不是整數\n",f); } else printf("%f不是整數\n",f); } else printf("%f不是整數\n",f); printf("判斷結束"); _getch(); return 0; } 尚未突破的問題: 如果不是正整數,是 C狀況 整數後加了其他東西 EX:5*/5哀 時,就跳錯誤訊息給USER看。 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) DEV-C++ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.124.105.30

05/19 20:52, , 1F
直接讀字串回來, 然後用簡單的finite state machine判斷
05/19 20:52, 1F

05/19 20:53, , 2F
一下讀入文字的狀態; 你直接用%f讀資料, 數字後面有非數
05/19 20:53, 2F

05/19 20:53, , 3F
字會直接被留在原來的stdin stream, 你目前的條件判斷也
05/19 20:53, 3F

05/19 20:54, , 4F
判斷不出來....@_@"
05/19 20:54, 4F
我不懂得是"finite state machine"…… 還有,後來要怎麼轉回數字資料型別?

05/19 20:55, , 5F
如果你還不懂得如何讀字串, 那就當小弟我沒推過吧Orz
05/19 20:55, 5F

05/19 20:56, , 6F
就搜ascii code是不是在'0'~'9'之間,還有第一字不得為0
05/19 20:56, 6F

05/19 20:59, , 7F
如果不用辨認狀況, 只要輸出是整數與不是整數, 那的確只
05/19 20:59, 7F

05/19 21:00, , 8F
樣像樓樓上說的, 抓字串的ascii code來判斷就行了XD
05/19 21:00, 8F

05/19 21:03, , 9F
FSM請自己google, 中譯"有限狀態機", 只是如果你不用分
05/19 21:03, 9F

05/19 21:04, , 10F
辨是哪一種狀況, 就不用這麼複雜, 直接判斷ascii code
05/19 21:04, 10F

05/19 21:04, , 11F
就好; 至於轉回數字資料型別, 如果你沒有要拿來計算, 基
05/19 21:04, 11F

05/19 21:05, , 12F
本上就直接用字串印出來就好, 連轉都不用轉XD
05/19 21:05, 12F

05/19 21:06, , 13F
我是要後面拿來放在別的程式用的 所以要轉QQ
05/19 21:06, 13F

05/19 21:06, , 14F
很認真在(GOOGLE了,先謝大大提供中譯
05/19 21:06, 14F
※ 編輯: white9cat 來自: 120.124.105.30 (05/19 21:09)

05/19 21:07, , 15F
至於'0'~'9', 學到印char了嗎?? 沒有的話就可以順便學學
05/19 21:07, 15F

05/19 21:08, , 16F
了XD 要轉喔?? 你說不限整數位數, 你打個12位以上的整
05/19 21:08, 16F

05/19 21:09, , 17F
數試試, 應該會被判斷出奇怪的結果喔@_@"
05/19 21:09, 17F
說不限整數位數,是指不管是1位數或是3位數,都能用。 我寫過限1~9,1位數的,方法就是用_getch讀成char再轉int, 可是那樣用不能套在2位數上…… 如果是要輸入1~100,有1位數 2位數 3位數可能,就不知道怎麼寫了…… ※ 編輯: white9cat 來自: 120.124.105.30 (05/19 21:14)

05/19 21:28, , 18F
用迴圈一位一位檢查囉
05/19 21:28, 18F
文章代碼(AID): #1ByzrAxq (C_and_CPP)
文章代碼(AID): #1ByzrAxq (C_and_CPP)