我想制作一个程序来玩扑克。当下注玩家应该输入一个整数作为他们的新注。为防止有人错误输入字符串时发生错误,该代码旨在输入字符串,检查它是否是数字,如果不是,则请求玩家输入有效的下注。使用istringstream()来区分“0”和非数字字符串
以下代码是我尝试使用istringstream函数将字符串betstring转换为int的函数。
如果字符串中没有数字,istringstream返回0。 betstring是一个无效的条目,如果它是一个小于0的数字或者它不包含数字。如果比特串是“0”,这是一个有效的赌注。
如果betstring是混合的字母和数字(例如j96kp),那么这个“j96kp”被假定为表示为了简化而下注96,所以它是有效的。
问题出在我输入一个等于“0”的betstring时。该代码将其解释为无效投注。我检查了逻辑运算符,我不明白为什么代码不会将“0”作为有效投注。
任何人都可以发现问题出现的地方吗?
#include <stdlib.h>
#include <stdio.h>
#include <sstream>
#include <string>
using namespace std;
int requestBet()
{
int newbet;
string betstring;
int validbet = 0;
while(!validbet)
{ //loop until a valid bet is entered
cin >> betstring;
validbet = 1; //assume bet is valid then test this
istringstream(betstring) >> newbet;
if(((newbet == 0) && (betstring.at(0) != 0)) || (newbet < 0))
{
cout << "Enter a valid bet" << endl;
validbet = 0;
}
}
return newbet;
}
int main()
{
int number;
cout << "Enter your bet" << endl;
number = requestBet();
return 0;
}
谢谢,这正是问题所在!我会在几分钟内“接受”这个答案 – Hugh