[问题] 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