#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();
}
无论您输入的是第一个结果,它都不会对输入做出反应,程序会直接跳过整个代码,然后返回到开头并再次请求另一个输入。我在这做错了什么?任何帮助表示赞赏。
答案 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'。
最诚挚的问候,
米歇尔。