#c
#c
Вопрос:
Напишите программу, которая предлагает пользователю ввести три целочисленных значения, а затем выводит значения в числовой последовательности, разделенной запятыми. Итак, если пользователь вводит значения 10 4 6, результат должен быть 4, 6, 10. Если два значения совпадают, их следует просто упорядочить вместе. Итак, ввод 4 5 4 должен давать 4, 4, 5.
int main()
{
cout << "Please enter three integer values seperated by a space (press 'enter' when done):n"; //prompt
int val1, val2, val3 = 0;
cin >> val1 >> val2 >> val3;
if (val1 <= val2 amp;amp; val2 <= val3)
{
cout << val1 << ", " << val2 << ", " << val3 << "n";
}
if (val1 >= val2 amp;amp; val2 >= val3)
{
cout << val3 << ", " << val2 << ", " << val1 << "n";
}
if (val2 <= val3 amp;amp; val3 <= val1)
{
cout << val2 << ", " << val3 << ", " << val1 << "n";
}
if (val3 <= val1 amp;amp; val1 <= val2)
{
cout << val3 << ", " << val1 << ", " << val2 << "n";
}
if (val1 <= val3 amp;amp; val3 <= val2)
{
cout << val1 << ", " << val3 << ", " << val2 << "n";
}
if (val2 <= val1 amp;amp; val1 <= val3)
{
cout << val2 << ", " << val1 << ", " << val3 << "n";
}
}
Программа работает для всех значений. Единственная проблема, с которой я сталкиваюсь: когда я ввожу повторяющиеся значения, такие как 2 2 3, я получаю выходные данные 2, 2, 3 дважды вместо одного раза. Извините, я не прокомментировал ни одну из строк. Это кажется достаточно понятным, и я не знаю, что бы я прокомментировал.
Комментарии:
1. Вы должны использовать
else if
операторы после первого оператора if .2. это хорошая возможность использовать отладчик. Если вы пройдетесь по своему коду построчно, вы увидите, какие два условия оцениваются
true
и откуда берется результат
Ответ №1:
Сохраняя свою логику, вы должны использовать else if
:
if (val1 <= val2 amp;amp; val2 <= val3)
{
cout << val1 << ", " << val2 << ", " << val3 << "n";
}
else if (val1 >= val2 amp;amp; val2 >= val3)
{
cout << val3 << ", " << val2 << ", " << val1 << "n";
}
else if (val2 <= val3 amp;amp; val3 <= val1)
{
cout << val2 << ", " << val3 << ", " << val1 << "n";
}
else if (val3 <= val1 amp;amp; val1 <= val2)
{
cout << val3 << ", " << val1 << ", " << val2 << "n";
}
else if (val1 <= val3 amp;amp; val3 <= val2)
{
cout << val1 << ", " << val3 << ", " << val2 << "n";
}
else if (val2 <= val1 amp;amp; val1 <= val3)
{
cout << val2 << ", " << val1 << ", " << val3 << "n";
}
но его можно упростить до
int values[3];
for (intamp; value : values)
std::cin >> value;
std::sort(std::begin(values), std::end(values));
const char* sep = "";
for (int value : values) {
std::cout << sep << value;
sep = ", ";
}
std::cout << std::endl;
Комментарии:
1. Я ценю вас; спасибо за вашу помощь, Jarod42. Я хочу убедиться, что понимаю ваши рассуждения о добавлении else if . Это потому, что, как только он найдет истинное выражение «if / else if», он пропустит все остальные строки кода, следующие за ним?