2015-08-02 3 views
-4

Я пытаюсь делать упражнения из книги: Программирование - Принципы и практика Использование C++ (Second Edition)[resolvedI не понимаю, почему моя программа не работает

Напишите программу, которая предлагает пользователю ввести три целочисленных значения, а затем выводит значения в числовой последовательности, разделенные запятыми. Таким образом, если пользователь вводит значения 10 4 6, выход должен быть 4, 6, 10. Если два значения одинаковы, их следует просто упорядочить вместе. Таким образом, входной 4 5 4 должен дать 4, 4, 5.

Это то, что я сделал:

#include "std_lib_facilities.h" 

int main(){ 
int val1 = 0; 
int val2 = 0; 
int val3 = 0; 

cout << "input 3 integers values with spaces between them\n"; 
cin >> val1 >> val2 >> val3; 

int bigger = 0; 
int middle = 0; 
int smallest = 0; 

    if(val1 >= val2 && val1 >= val3) { 
    bigger = val1; 
    } 
    if (val1 <= val2 && val1 <= val3) { 
    smallest = val1; 
    } 
    else { 
    middle = val1; 
    } 


    if(val2 >= val1 && val2 >= val3) { 
     bigger = val2; 
    } 
    if (val2 <= val1 && val2 <= val3) { 
     smallest = val2; 
    } 
    else { 
    middle = val2; 
    } 


    if(val3 >= val1 && val3 >= val2) { 
      bigger = val3; 
    } 
    if (val3 <= val1 && val3 <= val2) { 
      smallest = val3; 
     } 
    else { 
      middle = val3; 
    } 
cout << smallest << " " << middle << " " << bigger << '\n'; 
return 0; 
} 

Работа программы для некоторых значений, но не все, а именно: когда val3 является больше val1 и val2, я думаю, что в конце есть проблема: else {middle = val3; }

Коррекция Strousput: http://stroustrup.com/Programming/Solutions/Ch3/e3-6.cpp

Я сожалею, я не ставил никаких комментариев!

Thanks

+2

попробуйте использовать (если ... else если ... else) – MatejKr

+0

если (val3> = val1 && val3> = val2) { больше = val3; } else if (val3 <= val1 && val3 <= val2) { наименьший = val3; } else { средний = val3; } – MatejKr

+1

Скомпилируйте все предупреждения и информацию об отладке (например, 'g ++ -Wall -Wextra -g'). Затем ** используйте отладчик ** (например, 'gdb') для запуска вашей программы шаг за шагом, чтобы понять ваши ошибки. –

ответ

1

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

#include <iostream> 
#include <algorithm> 

using namespace std; 

int main() 
{ 
    int intArray[3] = {0, 0, 0}; 

    cout << "input 3 integers values with spaces between them\n"; 
    cin >> intArray[0] >> intArray[1] >> intArray[2]; 

    //Since you are using std you should have this sort method 
    sort(intArray, intArray + 3); 

    cout << intArray[0] << ", " << intArray[1] << ", " << intArray[2]; 

    return 0; 
} 

Если вы не можете использовать «своего рода», посмотрите на эту sorting int array with only 3 elements

+0

Спасибо, но я не знаю, какие массивы на данный момент, поэтому я использую то, что знаю! – kimson

+0

Извините, я не думал, что вы сможете использовать переменные. В любом случае, как указывали другие, вы не указали «else» в ваших операторах if. И я также могу видеть, что вы не указали запятую в своей распечатке: cout << наименьшее << "," << среднее << "," << больше << '\ n'; –

1

части иначе в вашей программе идет с предыдущим, если заявление. Итак, если ваш первый оператор if выполняется, но второй оператор if не работает, тогда будет выполняться инструкция else. Например, val1 = 4, val2 = 5, val3 = 6. По вашему коду:

if(val3 >= val1 && val3 >= val2) { 
      bigger = val3; 
    } 

, который, правда, так что установить больше = 6. Затем

if (val3 <= val1 && val3 <= val2) { 
      smallest = val3; 
     } 

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

else { 
      middle = val3; 
    } 

Он устанавливает середину = 6. использования, если-иначе лестница для всех 3-х случаях, как это:

if(val3 >= val1 && val3 >= val2) { 
      bigger = val3; 
    } 
    else if (val3 <= val1 && val3 <= val2) { 
      smallest = val3; 
     } 
    else { 
      middle = val3; 
    } 

если условие истинно, то остальная часть лестницы тю-пройдена.

+0

спасибо, большое объяснение! – kimson

Смежные вопросы