C++ 在C++;验证输入是否为int void get\u english\u input(){ 字符串输入=”; stringstream my_字符串(输入); int-ft; 双进; 虽然(正确){ cout

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

您可以重置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){

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。