#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
. Переменная likefloat 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;
}
Как вы можете видеть в приведенном выше коде, сначала мы получаем значение от пользователя, затем вычисляем налог и цену со скидкой.