Как выйти из цикла при сбое ввода int

Мне нужно написать программу, в которой она просит вас ввести два целых числа, а затем выводит те же самые два целых числа, но если вы введете «|», это завершит программу.

Это то, что у меня есть, для меня это должно работать, но, к сожалению, это не так.

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;

int main()
{
int var1 = 0;
int var2 = 0;

while(1)
{
cout << "Please enter two numbers.\n";
cin >> var1;
cin >> var2;

if(var1 == '|')
break;

else
{
if(var2 == '|')
break;

else
{
cout << var1 << ' ' << var2 << '\n';
}
}
}
}

Я уверен, что мне не хватает какой-то простой концепции, но любая помощь, очевидно, будет принята с благодарностью.

0

Решение

Когда вы читаете целое число, пользовательский ввод, как | просто вызовет (тихую) ошибку, которая ставит cin в режиме ошибки.

До сброса режима ошибки дальнейшие операции ввода игнорируются, поэтому вы получаете бесконечный цикл.

Вместо этого читайте пользовательский ввод как строки, используя std::getline от <string> заголовок. Проверьте, начинается ли строка ввода цифрой или «|». Если цифра, преобразуйте в целые числа, используя, например, std::stoi,


Встроенный синтаксис языка для бесконечного цикла for(;;), Он имеет практическое преимущество в том, что Visual C ++ не выдаст глупого предупреждения о выражении константного условия.

2

Другие решения

Вместо всего кода, начиная с if(var1 == '|'), сделай это:

if ( !cin )
break;

cout << var1 << ' ' << var2 << '\n';

Когда вы используете << читать в intи если на самом деле входные данные не содержат int, то он помещает cin в состояние отказа . тестирование !cin проверяет, если cin находится в состоянии сбоя.

Чтобы узнать больше об этом, прочитайте любую книгу или справочник по C ++.

0

Попробуйте использовать объявление var1 и var2 в качестве типа char
если требуется int, попробуйте

 if(var2 == 124)
0

ваши var1 и var2 не могут быть целочисленными, если вы хотите принимать любые символы, кроме числовых. Так что вы должны объявить с помощью char любую строку.

Я уверен, что вам понадобится оба числа для выполнения какой-либо функции вычисления, поэтому преобразуйте var1 и var2 из строки в целочисленный тип.

обратитесь к этому:
http://en.cppreference.com/w/cpp/string/basic_string/stol

Этот ответ на ваш вопрос «Как закончить программу»

ты можешь использовать

exit(1);

пример кода:

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main()
{
string var1,var2;
int num1,num2;

cout << "Please enter two numbers.\n";
cin>>var1;

if(var1 != "|")
{
num1 = ::atoi(var1.c_str());
}
else
{
cout<<"Programs Terminated."<<endl;
exit(1);
}

cin>>var2;

if(var2 != "|")
{
num2 = ::atoi(var2.c_str());
}
else
{
cout<<"Programs Terminated."<<endl;
exit(1);
}

cout<<"\nSum of 2 number: "<<num1+num2<<endl;
}
0
По вопросам рекламы [email protected]