Почему я получаю результат как 0.0

#c

#c

Вопрос:

код:

 #include<stdio.h>

int main() {
    float price;
    float tax=0.05*price;
    float discounted_price=0.05*price price-0.1*price;

    printf("Enter the total price: ");
    scanf("%f", amp;price);

    if(price>1000.00)
        printf("congrats you have scored a discount of 10 percent. your total bill amount 
                          is:%0.1f", discounted_price);
    else
        printf("your total bill is:%f",price);
        return 0;
 

ВЫВОД:

 Enter the total price:                                                                                                                                                       
1234                                                                                                                                                                         
congrats you have scored a discount of 10 percent. your total bill amount is:0.0  
 

Комментарии:

1. price неинициализируется перед использованием.

2. discounted_price=0.05*price price-0.1*price; Какова, по вашему мнению, будет ценность price в этот момент?

3. Убедитесь, что у вас все инициализировано, и скомпилируйте свой код с некоторыми базовыми флагами компиляции, например, -Wall -Werror -Wextra при использовании gcc / clang . Рассмотрите возможность использования valgrind и gdb для отладки вашего кода.

4. Ваш код не использует tax и не инициализирует price — вы были бы предупреждены об обоих этих случаях, если бы правильно использовали ваш компилятор. Кроме того, пожалуйста, убедитесь, что вы проверили возвращаемое значение scanf .

5. float discounted_price=0.05*price price-0.1*price; устанавливается discounted_price в соответствии со значением выражения в данный момент времени . price Последующее изменение не приведет к обновлению discounted_price .

Ответ №1:

поместите это назначение discounted_price=0.05*price price-0.1*price; после scanf("%f", amp;price); , и вы получите правильный результат, в противном случае, прежде чем вы введете число в качестве цены, для discounted_price уже было установлено неинициализированное значение.

ваш prolbem вычисляет discounted_price до того, как вы его получите! В вашем коде вы сначала вычисляете discounted_price с помощью «discounted_price= 0.05 price price-0.1 price;», а затем считываете число с клавиатуры с помощью «scanf («%f», amp;price)». Значение price неизвестно, когда вы используете его с помощью «discounted_price= 0.05 price price-0.1 price», поэтому ваш результат discounted_price неверен.

Комментарии:

1. @ojaswi Каким, по-вашему, должно быть значение по умолчанию для автоматического?

2. @ojaswi Это не обязательно 0 . Переменная like float price; остается неинициализированной и может иметь любое значение, включая недопустимые значения, которые могут вызвать исключения с плавающей запятой. Вы должны инициализировать price его перед использованием, в противном случае поведение не определено.

3. @ojaswi dxiv был прав. но ваша задача — рассчитать discounted_price до того, как вы его получите! В вашем коде вы сначала вычисляете discounted_price с помощью «discounted_price= 0.05 * price price-0.1 * price;», а затем считываете число с клавиатуры с помощью «scanf («%f», amp;price)». Значение price неизвестно, когда вы используете его с помощью «discounted_price= 0.05* price price-0.1 *price», поэтому ваш результат discounted_price неверен.

Ответ №2:

Это происходит потому, что вы пытаетесь вычислить значение из price, в то время как price не инициализируется, поэтому для этого вам нужно сначала получить цену, а затем вы можете рассчитать ее

 #include<stdio.h>

int main() {
    float price;
    float tax = 0.0f;
    float discounted_price = 0.0f;

    printf("Enter the total price: ");
    scanf("%f", amp;price);

    tax = 0.05f * price;
    discounted_price = 0.05*price price-0.1*price;
    
    if(price>1000.00)
        printf("congrats you have scored a discount of 10 percent. your total bill amount is:%0.1f", discounted_price);
    else
        printf("your total bill is:%f",price);
    return 0;
}
 

Как вы можете видеть в приведенном выше коде, сначала мы получаем значение от пользователя, затем вычисляем налог и цену со скидкой.