Задать вопрос
@JustFailer

Лучший вариант проверки ввода на несколько условий в C++?

Собственно, хочу узнать наиболее корректный способ проверить ввод из cin на различные условия и вывести различные сообщения по каждому. Вариантов проверки много, но из-за отсутствия опыта не могу понять, какой правильнее использовать. Пока что остановился на примерно таком варианте:
do {
	cin>>x;
	if (x < 0) {
		cout<<"x должно быть положительным числом"<<endl;
		continue;
	} else if (x == 0) {
		cout<<"x не должно равняться нулю"<<endl;
		continue;
	} else if (x == 5) {
		cout<<"x не должно равняться пяти"<<endl;
		continue;
	}	
	break;
} while (true);
  • Вопрос задан
  • 726 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 2
Можно немного упростить код:
while (true) {
  cin>>x;
  if (x < 0) {
    cout<<"x должно быть положительным числом"<<endl;
  } else if (x == 0) {
    cout<<"x не должно равняться нулю"<<endl;
  } else if (x == 5) {
    cout<<"x не должно равняться пяти"<<endl;
  } else {
    break;
  }
}
Ответ написан
Комментировать
Daniro_San
@Daniro_San
Программист
Знаете что плохо в вашем варианте?
То, что несмотря на присутствие continue, вы оставляете эти ужасные else if.

Можно попробовать так:
int x;
while (cin>>x) {
    if (x < 0) {
        cout<<"x должно быть положительным числом"<<endl;
        continue;
    }
    if ( !x ) {
        cout<<"x не должно равняться нулю"<<endl;
        continue;
    } 
    if (x == 5) {
        cout<<"x не должно равняться пяти"<<endl;
        continue;
    }
    break;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Декомпильните любой вариант и возможно узнаете , что этот вариант и так лучший .
Правильный тот, что работает, ду можно убрать для чистоты.

(и убрать else, подсказали)
Ответ написан
Комментировать
kozura
@kozura
Вот так, минимал и без continue.
int x;
while (true) {
	cin >> x;
		
	if (x <= 0) {
		cout << "x должно быть положительным числом" << endl;
	} else if (x == 5) {
		cout << "x не должно равняться пяти" << endl;
	} else {
		break;
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы