C++ cin>&燃气轮机;给定一个字符串,int将int赋值给0
我遇到的问题是,如果您输入任何字符串,cin会将int分配给0。一个有趣的发现是,如果以后将cin带到字符串中,则会得到为int.cin.fail()输入的整个字符串。由于某种原因,即使使用cin.ignore()等,它也总是返回true,并且if(cin>>startingPosition)也总是返回true。那么,如何让它捕捉到一个偶数,并识别它是一个字符串而不是一个int?如中所示,如果它是字符串,如何使其再次循环C++ cin>&燃气轮机;给定一个字符串,int将int赋值给0,c++,cin,C++,Cin,我遇到的问题是,如果您输入任何字符串,cin会将int分配给0。一个有趣的发现是,如果以后将cin带到字符串中,则会得到为int.cin.fail()输入的整个字符串。由于某种原因,即使使用cin.ignore()等,它也总是返回true,并且if(cin>>startingPosition)也总是返回true。那么,如何让它捕捉到一个偶数,并识别它是一个字符串而不是一个int?如中所示,如果它是字符串,如何使其再次循环 int getUserPosition(bool volatileCall
int getUserPosition(bool volatileCall = false) {
cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
int startingPosition;
cin >> startingPosition;
while (startingPosition >= WIDTH || startingPosition < 0) {
cout << "Invalid slot." << endl << endl;
if (volatileCall) {
return -1;
}
cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
cin >> startingPosition;
cout << startingPosition << endl;
}
return startingPosition;
}
int-getUserPosition(bool-volatileCall=false){
不能起动位置;
同时(起始位置>=宽度| |起始位置<0){
cout您必须保存来自cin的结果
isNumber=(cin>>开始位置);
整个代码看起来像
int getUserPosition(bool volatileCall = false) {
cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
int startingPosition;
bool isNumber = (cin >> startingPosition);
while(isNumber && (startingPosition >= WIDTH || startingPosition < 0)) {
cout << "Invalid slot." << endl << endl;
if (volatileCall) {
return -1;
}
cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
isNumber = (cin >> startingPosition);
cout << startingPosition << endl;
}
return startingPosition;
}
int-getUserPosition(bool-volatileCall=false){
cout启动位置);
而(isNumber&(startingPosition>=宽度| | startingPosition<0)){
请仔细阅读,尤其是和。最后学习如何创建。请详细说明您的问题,或者更确切地说,向我们提问。“我遇到的问题是,如果您输入任何字符串,cin会将int指定给0。”我看不出这是个什么问题……对于无效的输入,它还应该做什么?@Blaze另一种选择可能是将int保留为以前的值,或者报告错误。一个小的术语问题:赋值方向相反,从值到对象;它将0赋值给int。这根本不起作用。bool isNumber=(cin>>startingPosition);
是无效的,因为C++11,而中的测试是反向的,您需要清除cin
的状态才能从错误中恢复。@n.m.您是对的。我不会在C++11中测试它。我稍后会解决这个问题