закрытие цикла while (cin.good ()) правильно

Я пытаюсь заставить программу выйти правильно без нее. У меня есть ‘|’ как мой выход, если это первое, что я делаю при первом запуске, он закрывается нормально. Но после ввода значений и их печати, затем введите «|» выходить.
Распечатывает:
«Меньшее значение равно 0
Чем больше предыдущее второе значение «// хотим убрать это из показа

int main()
{
double first = 0, second = 0;
while(cin.good()){
char exit;
cout << "Enter '|' to exit.\n";
cout << "Enter two numbers:";
cin >> first >> second;
exit = cin.peek();

if(exit=='|'){
break;}
else{
if(first<second){
cout << "\nThe smaller value is " << first << "\nThe larger value is " << second << endl;
}
else if(first>second){
cout << "\nThe smaller value is " << second << "\nThe larger value is " << first << endl;
}
}
}
}

1

Решение

В своем коде вы предполагали, что ввод ваших пользователей будет ограничен чем-то, что можно использовать как двойное число. Это не обязательно так. Проблема, с которой вы столкнулись, не связана с утверждением exit = cin.peak(); но cin >> first >> second; Вы можете проверить это, введя любой нечисловой ввод в вашу программу и наблюдая за его ошибкой, присвоив 0 first и оставив second как есть.

Короче говоря, потому что преобразование ввода в двойное не удается, вы получите неопределенное значение для first и тогда ваша программа движется дальше.

Вы можете использовать следующий код в качестве примера. В этом случае я сначала заполняю свои переменные в виде строк, а затем пытаюсь выполнить преобразование по факту.

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

int main()
{
string str_first, str_second;
double first = 0, second = 0;
while(cin.good()){
cout << "Enter '|' to exit.\n";
cout << "Enter two numbers:";
cin >> str_first >> str_second;

if( (str_first.compare("|") == 0) || (str_second.compare("|") == 0) ){
cout << "\nThanks for playing\n" << endl;
break;}
else{
first = strtod (str_first.c_str(), NULL);
second = strtod (str_second.c_str(), NULL);
if(first<second){
cout << "\nFirst is small: The smaller value is " << first << "\nThe larger value is " << second << endl;
}
else if(first>second){
cout << "\nSecond is small: The smaller value is " << second << "\nThe larger value is " << first << endl;
}
}
}
}
1

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

Других решений пока нет …

По вопросам рекламы [email protected]