cin >> int 给定一个字符串,将 int 赋值给 0
cin >> int given a string assigns int to 0
我遇到的问题是,如果您输入任何字符串,cin 会将 int 分配给 0。一个有趣的发现是,如果您稍后将 cin 用于一个字符串,您将获得您输入的整个字符串诠释。 cin.fail() 由于某种原因总是 returns 为真,即使使用 cin.ignore() 等,并且 if( cin >> startingPosition ) 也总是 returns 为真。那么,我怎样才能让它捕捉到甚至识别出它是一个字符串而不是一个整数呢?比如,如果它是一个字符串,我如何让它再次循环?
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;
}
您必须保存 cin 的结果
isNumber = (cin >> startPosition);
整个代码看起来像
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;
}
我遇到的问题是,如果您输入任何字符串,cin 会将 int 分配给 0。一个有趣的发现是,如果您稍后将 cin 用于一个字符串,您将获得您输入的整个字符串诠释。 cin.fail() 由于某种原因总是 returns 为真,即使使用 cin.ignore() 等,并且 if( cin >> startingPosition ) 也总是 returns 为真。那么,我怎样才能让它捕捉到甚至识别出它是一个字符串而不是一个整数呢?比如,如果它是一个字符串,我如何让它再次循环?
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;
}
您必须保存 cin 的结果
isNumber = (cin >> startPosition);
整个代码看起来像
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;
}