C++ 在C++;验证输入是否为int void get\u english\u input(){ 字符串输入=”; stringstream my_字符串(输入); int-ft; 双进; 虽然(正确){ cout
您可以重置my_字符串的错误状态:C++ 在C++;验证输入是否为int void get\u english\u input(){ 字符串输入=”; stringstream my_字符串(输入); int-ft; 双进; 虽然(正确){ cout,c++,validation,stringstream,C++,Validation,Stringstream,您可以重置my_字符串的错误状态: void get_english_input() { string input = " "; stringstream my_string(input); int ft; double in; while(true) { cout << "Enter an integer value of feet." << endl; getline(cin, inpu
void get_english_input() {
string input = " ";
stringstream my_string(input);
int ft;
double in;
while(true) {
cout << "Enter an integer value of feet." << endl;
getline(cin, input);
my_string << input;
if(my_string >> ft)
break;
cout << "Invalid input! Please try again." << endl;
}
cout << "you entered " << ft << " as the int value for feet." << endl;
/*while(true) {
cout << "Enter a double value of inches." << endl;
getline(cin, input);
my_string << input;
break;
cout << "Invalid input! Please try again." << endl;
}
cout << "we are done entering english input" << endl;
cout << "feet = " << ft << endl;
cout << "inches = " << in << endl;*/
}
但我认为在这里,每次重新初始化它会更容易:
my_string.clear();
my_string.ignore( /* big number of choice */ );
while(true){
cout您可以重置my_字符串的错误状态:
void get_english_input() {
string input = " ";
stringstream my_string(input);
int ft;
double in;
while(true) {
cout << "Enter an integer value of feet." << endl;
getline(cin, input);
my_string << input;
if(my_string >> ft)
break;
cout << "Invalid input! Please try again." << endl;
}
cout << "you entered " << ft << " as the int value for feet." << endl;
/*while(true) {
cout << "Enter a double value of inches." << endl;
getline(cin, input);
my_string << input;
break;
cout << "Invalid input! Please try again." << endl;
}
cout << "we are done entering english input" << endl;
cout << "feet = " << ft << endl;
cout << "inches = " << in << endl;*/
}
但我认为在这里,每次重新初始化它会更容易:
my_string.clear();
my_string.ignore( /* big number of choice */ );
while(true){
coutCheck out…Check out…暴力解决方案是将输入转储到std::string中,然后在该字符串上循环,并检查每个字符是否介于0和9之间
这不是最优雅的方法。但它既简单又愚蠢。:-)
bool-isnum(字符c)
{
如果(!(c='0'))
{
返回false;
}
返回true;
}
bool有int(std::string&s)
{
对于(int i=0;i
暴力解决方案是将输入转储到std::string中,然后在该字符串上循环并检查每个字符是否在0到9之间
这不是最优雅的方法。但它既简单又愚蠢。:-)
bool-isnum(字符c)
{
如果(!(c='0'))
{
返回false;
}
返回true;
}
bool有int(std::string&s)
{
对于(int i=0;i
我想
bool isnum(char c)
{
if(! ( c <= '9' && c >= '0'))
{
return false;
}
return true;
}
bool has_int(std::string &s)
{
for( int i = 0; i < s.length(); i++)
{
if( ! isnum(s[i])
{
return false;
}
}
return true;
}
将始终计算为true(如果mystring为空,则可能不是)。无论mystring是否实际包含数字,该操作仍然有效
一个想法是
mystring >> ft
size\u t found=input.find_first_not_of(“0123456789”);
如果(找到!=字符串::npos)
{
我想是吧
bool isnum(char c)
{
if(! ( c <= '9' && c >= '0'))
{
return false;
}
return true;
}
bool has_int(std::string &s)
{
for( int i = 0; i < s.length(); i++)
{
if( ! isnum(s[i])
{
return false;
}
}
return true;
}
将始终计算为true(如果mystring为空,则可能不是)。无论mystring是否实际包含数字,该操作仍然有效
一个想法是
mystring >> ft
size\u t found=input.find_first_not_of(“0123456789”);
如果(找到!=字符串::npos)
{
cout+1——在这方面,重置cin
的建议没有太大的偏差,他们只是使用了错误的流(因为cin
没有进行转换)非常感谢!这似乎解决了问题。这不仅仅是错误状态,每个输入都会附加到preivous上。行my_string@flies:对,我假设my_string
的最终内容被丢弃(实际上应该声明为istringstream
),因此我在这方面更改了代码。但是,如果这是一个问题,更改将导致编译错误。+1--在这方面,重置cin
的建议没有太大的偏差,他们只是使用了错误的流(因为cin
没有进行转换)非常感谢!这似乎解决了问题。这不仅仅是错误状态,每个输入都会附加到preivous上。行my_string@flies:对,我假设my_string
的最终内容被丢弃(实际上应该声明为istringstream
),因此我在这方面更改了代码。但是,如果这是一个问题,更改将导致编译错误。当我测试此函数时,如果我输入诸如“c”之类的字符,我总是会收到错误消息(实际上这是最初的问题;错误消息不会消失)。但是,如果我输入一个数字,它将接受它并打印输出。嗯,也许问题是mystring需要清除。毕竟,如果你从未成功提取int值,“c”将始终位于mystring的开头。你在连续迭代中所做的只是在mystrin的末尾添加内容g、 如果您尝试在不成功的情况下清除mystring会怎么样?可能会有一个字符串垃圾,并将mystring提取到该字符串,以防它无法提取到int。当我测试此函数时,如果输入诸如“c”之类的字符,我总是会收到错误消息(实际上这是最初的问题;错误消息不会消失)。但是,如果我输入一个数字,它将接受它并打印输出。嗯,也许问题是mystring需要清除。毕竟,如果你从未成功提取int值,“c”将始终位于mystring的开头。你在连续迭代中所做的只是在mystrin的末尾添加内容g、 如果您尝试在不成功的情况下清除mystring呢?可能有一个字符串垃圾并将mystring提取到该垃圾中,以防它不能提取到int。