Как сделать так, чтобы оператор printf появлялся только в том случае, если он истинен?

Я делаю калькулятор доставки, если посылка весит более 50 фунтов, не удалось отправить посылку. Я хочу, чтобы заявление появлялось только в том случае, если посылка весит более 50 фунтов, но она появляется несмотря ни на что.

Я пробовал это как оператор else, оператор if и оператор if else.

main(){
    double distance, weight, weightCharges, shippingCharge, distanceCharge, unableToShip;
    printf ("Enter the weight of the package:\n");
    scanf ("%lf", &weight);
    printf ("Enter the distance your package needs to go: \n");
    scanf ("%lf", &distance);

    if (weight <= 10)
        weightCharges = weight * 3.00;
        else
            if (weight <= 50)
                weightCharges = weight * 5.00;
            else (weight > 50);
        weightCharges= 0;
    if (distance > 1000)
        distanceCharge = weightCharges + 10;
    shippingCharge = weightCharges + distanceCharge;
    unableToShip = weight > 50;

    printf ("Your total cost is: %.2lf \n", shippingCharge);
    printf ("We're unable to ship your package \n", unableToShip);

}

Я ожидаю, что второй printf появится только в том случае, если мы не сможем отправить их пакет, но он появится несмотря ни на что.


person Stephanie Couto    schedule 11.02.2019    source источник
comment
Идентификация используется для удобства чтения в C / C ++, а не для потока управления. Добавьте подтяжки.   -  person Stephen Newell    schedule 11.02.2019
comment
Между прочим, было бы разумнее объявить unableToShip типом bool, а не типом double, поскольку единственные значения, которые вы хотите выразить с его помощью, - это true или false.   -  person Jeremy Friesner    schedule 11.02.2019
comment
Я все еще нахожусь в начале своего знакомства с C в моем классе компьютерного программирования, поэтому, к сожалению, мы этого еще не узнали. Но спасибо за совет! Я понял.   -  person Stephanie Couto    schedule 11.02.2019
comment
Разве вы не получили предупреждения в этой строке else (weight > 50)? Что-то вроде выражения без эффекта? Ваш weightCharges всегда будет 0.   -  person Gerhardh    schedule 11.02.2019
comment
Вы спрашиваете о C или C ++? Это очень разные языки, и хотя можно писать программы, которые делают одно и то же на обоих языках, пересечение плохого C ++ и плохого C.   -  person Martin Bonner supports Monica    schedule 11.02.2019


Ответы (4)


if здесь работает так же, как и везде:

if (unableToShip) 
  printf ("We're unable to ship your package\n");
person Jeremy Friesner    schedule 11.02.2019

Вы пытались поставить какие-нибудь утверждения if-else?

int main()
{
    double distance, weight, weightCharges, shippingCharge, distanceCharge; // no need for unableToShip;
    printf ("Enter the weight of the package:\n");
    scanf ("%lf", &weight);
    printf ("Enter the distance your package needs to go: \n");
    scanf ("%lf", &distance);

    if (weight <= 10)
        weightCharges = weight * 3.00;
        else
            if (weight <= 50)
                weightCharges = weight * 5.00;
            else (weight > 50);
        weightCharges= 0;
    if (distance > 1000)
        distanceCharge = weightCharges + 10;
    shippingCharge = weightCharges + distanceCharge;
    //unableToShip = ;

    printf ("Your total cost is: %.2lf \n", shippingCharge);
    if(weight > 50)
    printf ("We're unable to ship your package \n");

}
person dzuda11    schedule 11.02.2019

Во-первых, unableToShip должен иметь тип int или bool (если вы используете актуальный компилятор и поддерживает <stdbool.h>). double не совсем подходит для такого рода вещей.

Во-вторых, даже если unableToShip был правильным типом для логического условия, передача в качестве аргумента printf не заставляет printf работать условно. Это делает его частью форматированного вывода, если у вас есть строка формата для его принятия. Вам нужно if (unableToShip), за которым следует оператор printf.

В-третьих, если вы печатаете строку, которая не содержит форматирования и заканчивается новой строкой, вы должны использовать puts вместо printf.

person Govind Parmar    schedule 11.02.2019
comment
Да, ну, я только на четвертом задании в моем вводном курсе компьютерного программирования, так что недопонимание - это преуменьшение. - person Stephanie Couto; 11.02.2019

person    schedule
comment
Добро пожаловать в SO. Вы можете добавить то, что вы изменили, чтобы решить проблему. Ваш код должен вызвать некоторые предупреждения в компиляторе. Ваш код тоже не решает проблему. Последний вывод выполняется без учета каких-либо условий. - person Gerhardh; 11.02.2019
comment
Почему положительные голоса? На вопрос вообще нет ответа. Код не решает проблему и вводит неопределенное поведение. - person Gerhardh; 11.02.2019
comment
Вы можете добавить то, что вы изменили, чтобы решить проблему. Ваш код должен вызывать некоторые предупреждения в компиляторе. - person John rey sarabia; 13.02.2019
comment
Какова цель ответа частичной копией моего комментария без дополнительного текста? Если есть сообщение, я его не понимаю. - person Gerhardh; 13.02.2019