Siddharth Saurav - IIT [BHU] Ответов: 2

Наибольшая из трех программных ошибок


#include<iostream>
using namespace std;
main()
{
    int a, b, c, d;
    cout << "Enter three numbers.";
    cin >> a >> b >> c;
    d = ( a>b ? a : b );
    cout << (d > c) ? d : c;
    return 0;
}



Эта программа возвращает значение 0 для любого из трех значений, которые я ввожу. Любая помощь будет очень признательна. Ty

Что я уже пробовал:

idk я пробовал этот код но та же проблема

#include<iostream>
using namespace std;
main()
{
    int a, b, c;
    cout << "Enter three numbers.";
    cin >> a >> b >> c;
    cout << ((a>b ? a : b ) > c) ? (a>b ? a : b ) : c ;
    return 0;
}

KarstenK

вы смешиваете "бизнес - логику" и "пользовательский интерфейс" - это плохой стиль.

может быть, когда-нибудь ты поймешь это. До тех пор ;-)

2 Ответов

Рейтинг:
2

CPallini

Сандип я уже дал вам решение. Если вы хотите придерживаться 1-строчного кода, то попробуйте:

#include <iostream>
using namespace std;

int main()
{
    int a, b, c;
    cout << "Enter three numbers.";
    cin >> a >> b >> c;
    cout << ( a > b ? ( a > c ? a : c) : ( b > c) ? b : c) << endl;
}


Рейтинг:
12

Sandeep Mewara

Это происходит потому, что вы используете оператор ?: в cout. Все дело в этом приоритет операций[^]. Кронштейн является одним из самых верхних.

Когда вы пишете:

cout << (d > c) ? d : c;
d>c оценивается так, как они заключены в скобки, и результат этого выводится на печать. Таким образом,значения всегда будут равны 0 или 1,и ни одно из значений a, b, c там не будет.

Небольшое изменение должно сработать:
#include<iostream>
using namespace std;

int main()
{
    int a, b, c, d;
    cout << "Enter three numbers.";
    cin >> a >> b >> c;
    d = ( a>b ? a : b );
    cout << (d > c ? d : c);
    return 0;
}

Переехал весь ?: внутри дома bracket что и было задумано.


CPallini

5.