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

看板C_and_CPP (C/C++)作者 (文)時間11年前 (2014/10/14 13:22), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
各位大大好,小弟第一次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,無法把座標一次輸入完 想詢問各位大大,有什麼方法嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 116.118.151.35 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1413264136.A.2C7.html

10/14 13:59, , 1F
(x, y)當成一組string, 拆開後去判斷 x y 是不是數字
10/14 13:59, 1F

10/14 14:00, , 2F
可用lib判斷 C++11 std::stoi, 98 boost/lexical_cast
10/14 14:00, 2F

10/17 14:57, , 3F
謝謝大大,已成功
10/17 14:57, 3F
文章代碼(AID): #1KFBC8B7 (C_and_CPP)
文章代碼(AID): #1KFBC8B7 (C_and_CPP)