[問題] cin 連續輸入如何判斷字元或數字

作者: app15896 (文)   2014-10-14 13:22:13
各位大大好,小弟第一次PO文如果格式不適合請見諒。
小弟目前正在學寫程式,在練習題目中遇到了此問題,想輸入一座標(x,y),當輸入錯誤
時,重新進入while。可是當小弟使用連續cin時,無法判斷x1,y1是否為數字,只要x1,y1
非數字就會陷入無限回圈中,因此想詢問各位大大可否有解決辦法。
程式碼如下:
01 char BracketBefore, BracketLater,comma;//括弧前後,逗號
02 double x1, y1, x2, y2, x3, y3;//座標點
03 //第一個座標輸入
04 while (1)
05 {
06 cout << "請輸入座標:";
07 cin >> BracketBefore >> x1 >> comma >> y1 >> BracketLater; //輸入(x1,y1)
08 if ( BracketBefore != '(' ){ cout << "數字前請輸入 '(' " << endl; } //判斷是否為(
09 if ( x1=1)else{ cout << "第一個數請輸入數字" << endl; } //判斷是否為數字
10 if ( comma != ',' ){ cout << "兩數字中間請輸入 ',' " << endl; } //判斷是否為 ,
11 if ( y1 = 1 ){}else{ cout << "第二個數請輸入數字" << endl; } //判斷是否為數字
12 if ( BracketLater != ')' ){ cout << "數字後請輸入 ')' " << endl;} //判斷是否為)
13
14 cout << BracketBefore << x1 << comma << y1 << BracketLater;//輸出(x1,y1)
15 if ((BracketBefore == '(') || (comma == ',') || (BracketLater == ')')){ break; }
16 }
小弟目前想到的方法是改成這樣
01 char BracketBefore, BracketLater,comma;//括弧前後,逗號
02 double x1, y1, x2, y2, x3, y3;//座標點
03 //第一個座標輸入
04 while (1)
05 {
06 cout << endl << "第一個:";
07 cin >> BracketBefore;
08 if ((BracketBefore != '(')){cout << "數字前請輸入 '('"; continue; }//(
09 if (cin >> x1){}else{ cout << "請輸入數字"; continue; }
10 cin.clear(); cin.sync();//X1
11 cin >> comma; if (comma != ','){cout << "兩數字中間請輸入','";continue;}//,
12 if (cin >> y1){}else{ cout << "請輸入數字"; continue; }
13 cin.clear(); cin.sync();//Y1
14 cin >> BracketLater;if(BracketLater !=')'){cout<<"數字後請輸入')'"; continue; }//)
15 cout << BracketBefore << x1 << comma << y1 << BracketLater;
16 if ((BracketBefore == '(') || (comma == ',')||(BracketLater == ')')){break; }
17 }
可是這樣此程式碼變成只要key一次鑑要按一次enter,無法把座標一次輸入完
想詢問各位大大,有什麼方法嗎?
作者: BlazarArc (Midnight Sun)   2014-10-14 13:59:00
(x, y)當成一組string, 拆開後去判斷 x y 是不是數字可用lib判斷 C++11 std::stoi, 98 boost/lexical_cast
作者: app15896 (文)   2014-10-17 14:57:00
謝謝大大,已成功

Links booklink

Contact Us: admin [ a t ] ucptt.com