上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
babu61509 散播福音的祭司
註冊時間: 2007-08-26 文章: 142
681.01 果凍幣
|
發表於: 2008-5-21, AM 11:47 星期三 文章主題: [c++小技巧] 判斷輸入是否為數字 [改] |
|
|
因為在別的地方看到有人在問
cin >> 整數變數;
如果輸入的不是整數,那麼輸出的時候會出錯,能不能避免之類的0.0
那時候我回答他 用 try catch起來就好˙口˙(無腦回答-.-,問題都沒看清楚XDD)
後來看他回了有沒有別的方法...於是 MSDN + GOOGLE大神就出現了以下東西 :
代碼: |
#include <iostream>
using namespace std;
void main()
{
int num; // 宣告整數
while( (cout << "請輸入整數 : ") && (cin>>num)==0){ // 顯示 字串 和 判斷輸入是否為數字
cin.clear(); // 清除已取得資料
// fflush(stdin); // 清除鍵盤緩衝區
rewind(stdin);
cout << "輸入格式錯誤!請重新輸入\n";
}
cout << num << endl;
}
|
while 那行很複雜是因為放在一起比較短 (毆
基本上就是這樣0.0
閒閒的可以去試試看如果沒有cin.clear();或fflush(stdin);跑起來會怎樣.
修改 :
happylin 說 fflush 只有 暈倒死 可用0.0
那改rewind吧0 口0
不過pipe也還是不能用._.
補充 :
其實這個還是有點小bug,只要前面輸入數字後面隨便打,他還是會取到前面的數字而不會說 格式錯誤 0.0 _________________ 已經畢業了!!
babu61509 在 2008-5-21, PM 5:05 星期三 作了第 3 次修改 |
|
回頂端 |
|
|
happylin 略有貢獻的成員
註冊時間: 2007-07-26 文章: 70
127.34 果凍幣
|
發表於: 2008-5-21, PM 2:35 星期三 文章主題: |
|
|
fflush(stdin);
這不是標準的用法.
這只有在windows 下才會正常. 且只能清除windows 下的keyboard input
如果是用pipe 轉向的也沒用 example
c:>input.exe < a.txt
函數庫手冊上(非MS 版的說明)
有寫fflush(FILE *) 只能flush output stream . 對input stream 的動作是無定意的.
所以. 用此法還是會有問題.
較好的設計方法. 老實說我也不知
我都是用最笨的方法. 讀入一整個字串. 在去判斷是否全為數字. |
|
回頂端 |
|
|
happylin 略有貢獻的成員
註冊時間: 2007-07-26 文章: 70
127.34 果凍幣
|
發表於: 2008-5-22, AM 9:37 星期四 文章主題: |
|
|
在程式設計師論壇找到的
代碼: |
#include <iostream>
int main()
{
int i;
while (std::cout << "please input a interget: ",!(std::cin >> i))
{
//錯誤:輸入非數字
std::cout << "your input is error \n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 清空緩衝區.
}
std::cout << "Your input is " << i;
return 0;
}
|
|
|
回頂端 |
|
|
|