程序在用户的第一次输入时不执行任何操作(跳过程序中的整个代码)

时间:2014-01-03 22:21:27

标签: c++

#include <iostream>
#include <sstream>
#include <limits>
#include <cstdlib>

using namespace std;

void broj_na_artikli(int &artikli);
bool is_num(const string &s);

int main()
{
    int artikli;
    broj_na_artikli(artikli);
    for(int i = 0; i < artikli; i++)
        cout << i << endl;
}

void broj_na_artikli(int &artikli){
    while(true){
        string vlez;
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cin >> vlez;

        if(is_num(vlez)){
            artikli = atoi(vlez.c_str());
            if(artikli > 100 || artikli < 1){
                cout << "Error, try again." << endl;
            }
            else{
                break;
            }
        }
        else{
            cout << "Error, try again." << endl;
        }
    }
}

bool is_num(const string &s){
    string::const_iterator it = s.begin();
    while(it != s.end() && isdigit(*it)){
        ++it;
    }
    return !s.empty() && it == s.end();
}

无论您输入的是第一个结果,它都不会对输入做出反应,程序会直接跳过整个代码,然后返回到开头并再次请求另一个输入。我在这做错了什么?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

这一行:

cin.ignore(numeric_limits<streamsize>::max(), '\n');

阻止,直到您输入'\ n'。

答案 1 :(得分:1)

我认为你应该阅读http://www.cplusplus.com/reference/istream/istream/ignore/ std :: stream :: ignore等待numeric_limits :: max()或'\ n'。

最诚挚的问候,

米歇尔。