評價: 0 回應: 0 閱覽: 332
置頂

cin 連續輸入如何判斷字元或數字

在練習題目中遇到了此問題,想輸入一座標(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 == ')')){ b
reak; }
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<<"數字後請輸入')'"; conti
nue; }//)
15   cout << BracketBefore << x1 << comma << y1 << BracketLater;
16   if ((BracketBefore == '(') || (comma == ',')||(BracketLater == ')')){brea
k; }
17 }

可是這樣此程式碼變成只要key一次鑑要按一次enter,無法把座標一次輸入完

想詢問各位大大,有什麼方法嗎?

會員登入 (先登入會員才能回覆留言喔!)

Facebook留言