【发布时间】:2020-03-14 12:39:23
【问题描述】:
这个问题的名字可能不好,因为我不知道这里发生了什么。但我有一个名为str2int() 的函数,用于检查用户输入值是否为数字。无论出于何种原因,它都会在给出任何输入之前触发。
这是在我的main() 中调用的:
std::string stringSKILL;
for(int i = 0; i < 5; i++) {
switch(i) {
case 0:
cout <<"\n\nStrength (How strong you are)";
cout <<"\nHow many points (you have " << total_SKILL_points << " left): ";
std::getline(std::cin,stringSKILL);
Strength = str2int(stringSKILL);
if(str2int_i == 0) {
Strength = 0;
i--;
str2int_i++;
break;
// }'s later in program
这是函数:
// Check if user input is a number
int str2int(std::string &str) {
std::stringstream ss(str);
int num;
ss >> num;
if(ss) { // error handling
return num;
}
else {
cout <<"\n\nPlease Enter a Number!";
str2int_i--;
}
}
但是当这个程序运行时,“请输入一个数字”已经打印出来了,没有给出任何输入。之后,一切正常。 这是为什么呢?
【问题讨论】:
-
在
std::getline()之后尝试std::cin.ingore() -
你在调试过程中观察到了什么?
标签: c++ getline stringstream