Я пытаюсь выполнить упражнение из книги: Программирование — принципы и практика использования C (второе издание)

#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», он пропустит все остальные строки кода, следующие за ним?