Как говорится в этом вопросе, по какой-то причине моя программа не смывает ввод или использует мои переменные способами, которые я не могу определить в данный момент. Это для домашних заданий проекта, что я вышел за рамки того, что я должен был сделать для него, теперь я просто хочу, чтобы программа действительно работает: PВвод не очищается
Детали, чтобы сделать нахождение проще:
Программа выполняет безупречно при первом прохождении. Все броски работают, принимаются только правильные значения (n> 0) и превращаются в двоичные.
Как только я ввожу свой прекратить ввод, программа переходит в петлю и только просит для вновь прекратить так:
Когда я запускаю эту программу на Netbeans на моем Linux Laptop, программа вылетает после ввода значения завершения. На Visual C++ в Windows он переходит в цикл, как описано.
В коде я попытался очистить каждый поток и инициализировать каждую переменную новую, когда программа перезагружается, но безрезультатно. Я просто не вижу своей ошибки.
Я считаю, что ошибка лежит либо в главной функции:
int main(void)
{
vector<int> store;
int terminate = 1;
do
{
int num = 0;
string input = "";
if(cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
cout << "Please enter a natural number." << endl;
readLine(input, num);
cout << "\nThank you. Number is being processed..." << endl;
workNum(num, store);
line;
cout << "Go again? 0 to terminate." << endl;
cin >> terminate // No checking yet, just want it to work!
cin.clear();
}while(terminate);
cin.get();
return 0;
}
или в функции, которая считывает номер:
void readLine(string &input, int &num)
{
int buf = 1;
stringstream ss;
vec_sz size;
if(ss.fail())
{
ss.clear();
ss.ignore(numeric_limits<streamsize>::max(), '\n');
}
if(getline(cin, input))
{
size = input.size();
for(int loop = 0; loop < size; ++loop)
if(isalpha(input[loop]))
throw domain_error("Invalid Input.");
ss << input;
ss >> buf;
if(buf <= 0)
throw domain_error("Invalid Input.");
num = buf;
ss.clear();
}
}
Aaaah, я подумал, что если (cin.fail()) будет очистить поток, но да, это логическая ошибка ^^ Спасибо! – IAE