使用 istringstream() 区分"0"和非数字字符串
Using istringstream() to distinguish between "0" and non-numerical string
我正在尝试制作一个玩扑克的程序。投注时,玩家应输入一个整数作为他们的新赌注。为了防止错误,当有人输入错误的字符串,代码打算接受一个字符串,检查它是否是一个数字,如果不是,然后要求玩家输入一个有效的赌注。
下面的代码是我使用istringstream函数将字符串betstring转换为int的尝试。
如果字符串中没有数字,则istringstream返回0。如果Betstring是小于0的数字或不包含数字,则该条目无效。如果betstring为"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;
}
betstring.at(0) != 0
不做您可能期望它做的事情。你想比较字符,也就是说,看看第一个字符是不是'0'
,所以你必须把它放在这里。实际上,您的代码将查看第一个字符是否具有数值零(即' ')。
…玩家应该输入一个整数作为他们的新赌注。为了防止错误,当有人输入错误的字符串,代码打算接受一个字符串,检查它是否是一个数字,如果不是,然后要求玩家输入一个有效的赌注。
下面的内容将为您工作。
template <class T>
T StringToValue(const std::string& str) {
std::istringstream iss(str);
T value; iss >> value;
// Use fail(), not bad()
if (iss.fail())
throw std::runtime_error("'" + str +"' is not a value");
return value;
}
你可以这样使用:
string betstring;
cin >> betstring;
int bet;
bet = StringToValue<int>(betstring);
如果字符串不是T
类型的表示(int
, float
等),则抛出runtime_error
。
如果您切换到bad()
,那么当遇到fail()
下会抛出的东西时,该函数将返回0。
相关文章:
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 不反转数字的字符反转
- 如果是数字或字符,请检查输入
- 编写一个程序,输入整数 n 并打印该数字的字符数(符号除外)
- 识别数字的字符
- 遍历 std::string 时如何获取没有数字的字符?
- 2命令行参数中的数字数字仅被视为一个数字
- 如何验证输入仅是数字数字
- 为什么 cin.fail() 在输入数字后跟字符时不返回 false?
- 测试字符串是数字还是字符
- 如果字符串中没有空格,如何解析带有数字和字符的字符串并分隔数字和字符
- RSA数字和字符值算法
- 正则表达式:仅限数字 + 字母数字 + 特殊字符
- 检查字符串的每个元素中的数字或字符
- 调用函数时,是否可以在被调用函数的名称后面附加一个数字或字符
- c++ cin.ignore忽略空格、数字和字符来测试回文
- 读入后面跟着数字的字符
- 使用数字和字符操作符创建表达式
- c++计数数字和字符
- 我的程序应该摆脱不是数字的字符,但不能完全工作,关于我做错了什么有什么想法吗?