C++ 如何检查std::cin是否失败
我正在制作一个游戏,在开始时,玩家需要为他们角色的不同类别(如辐射)分配点数。当前使用C++ 如何检查std::cin是否失败,c++,cin,C++,Cin,我正在制作一个游戏,在开始时,玩家需要为他们角色的不同类别(如辐射)分配点数。当前使用std::cin读取播放器输入。如果玩家输入的是字母而不是数字,std::cin将失败并使整个游戏崩溃 我试图用std::cin.fail()检查失败,但没有运气 读取播放机输入的相关代码如下: for(int i=0;iStrength已停止读取,因为输入无效,并将流中的无效输入留到下次读取操作时遇到-但它不会将流本身置于错误状态。而不是使用std::cin>>Stre波长,使用 std::getline(s
std::cin
读取播放器输入。如果玩家输入的是字母而不是数字,std::cin
将失败并使整个游戏崩溃
我试图用std::cin.fail()
检查失败,但没有运气
读取播放机输入的相关代码如下:
for(int i=0;i<5;i++){
开关(一){
案例0:
cout如果输入错误,可以清除错误标志并忽略行的其余部分
#include <iostream>
#include <limits>
#include <list>
#include <string>
int main() {
int total_SKILL_points = 100;
int Strength;
while(true) {
std::cout << "\n\nStrength (How strong you are)\n"
"How many points (you have " << total_SKILL_points << " left): ";
if(std::cin >> Strength) { // check that cin is in a good state after extraction
// success
break;
} else {
// failure
if(std::cin.eof()) {
std::cout << "user aborted\n";
return 1;
}
std::cout << "\n\nPlease enter a number!";
// clear error flags
std::cin.clear();
// ignore rest of line
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
std::cout << Strength << "\n";
}
#包括
#包括
#包括
#包括
int main(){
智力技能总分=100;
内在力量;
while(true){
std::cout我认为“尝试并捕获”是一个很好的选择。您可以执行以下操作:
for (int i = 0; i < 5; i++){
switch(i){
case 0:
std::cout <<"\n\nStrength (How strong you are)";
std::cout <<"\nHow many points (you have " << total_SKILL_points << " left): ";
std::cin >>Strength;
int intStrength;
try{
intStrength = std::stoi(Strength);
}
catch(std::invalid_argument const &e){
std::cout <<"\n\nPlease enter a number!" << std::endl;
i--;
break;
}
total_SKILL_points = total_SKILL_points - intStrength;
break;
for(int i=0;i<5;i++){
开关(一){
案例0:
我已经使用了彼得给我的方法。谢谢你的帮助
彼得对浏览本帖的人的回答是:
使用std::cin.fail()
在您的情况下不起作用,因为流本身没有处于错误状态。std::cin>>Strength
已停止读取,因为输入无效,并将流中的无效输入留到下次读取操作时遇到-但它不会将流本身置于错误状态。而不是使用std::cin>>Stre波长
,使用
std::getline(std::cin,astring)
其中字符串的类型为std::string
,并解析该字符串以检查其是否具有所需的输入或其他数据
注意:不要在同一个流中将std::getline()
与>
混合使用。使用std::cin.fail()
在您的情况下不起作用,因为流本身没有处于错误状态。std::cin>>Strength
已停止读取,因为输入无效,并将流中的无效输入留在下一次读取操作中遇到-但它不会将流本身置于错误状态。而不是使用std::cin>>St增强
,使用std::getline(std::cin,astring)
读取一行输入,其中astring
的类型为std::string
,并解析该字符串以检查它是否具有所需的输入或其他数据。注意:不要在同一流中混合使用std::getline()
和
。