2015-10-12 3 views
-11

Этот код вместо этого печатает лишний мусор памяти. Как я могу это исправить? В этом коде я пытаюсь удалить 10% цены (которая будет вставлена ​​пользователем).Код печати дополнительной памяти мусора

if (value == 1){ 
    int price = 0; 
    int price_final = (price - (price - 0.01); 
    printf ("INSERT A PRICE >> "); 
    scanf ("%d", &price); 
    printf ("Final value %d", price_final); 
} 
+4

Этот код не компилируется из-за недостатка ')'. – MikeCAT

+3

Этот код пытается выполнять операции с плавающей запятой ('- 0.01') для целочисленных переменных. Он также читает пользовательский ввод через 'scanf()', который * bound * возвращает OP к SO позже. ;-) – DevSolar

+1

Даже если ошибка исправлена, введенный пользователем 'price' не будет учитываться при расчете' price_final'. – MikeCAT

ответ

0

С этим связано множество проблем.

Первое:

int price_final = (price - (price - 0.01); 

Вы выполняете операции с плавающей точкой на целое число, которое не определено.

Второе:

Вы вычисляете новую цену, прежде чем вы даже читать в цене пользователя. Это бессмысленно, и price всегда будет принимать в вашем коде 0.

Третье:

int price_final = (price - (price - 0.01); 

отсутствует закрывающую скобку ')'

Там может быть больше, но эти три являются совершенно очевидно. .

1

Вы делаете вычисление (int price_final = (price - (price - 0.01);, прежде чем получить значение price Это как код должен быть:

if (value == 1) { 
    float price = 0, price_final; 

    printf ("INSERT A PRICE >> "); 
    if (scanf ("%f", &price) == 0) { 
     fprintf(stderr, "Invalid price"); 
     exit(EXIT_FAILURE); 
    } 

    price_final = price - (price - 0.01); 
    printf ("Final value %f\n", price_final); 
} 

Вы также вычитания float (0,01) от int, который не определено, поэтому я изменил обе переменные float

Кроме того, я рекомендую вам прочитать строку с первым fgets и разобрать строку с помощью sscanf:.

char line[100]; 
fgets(line, 99, stdin); 
int price; 

if (sscanf(line, "%d", &price) == 0) 
    handle error 
+0

Код, который вы отправили, будет производить только мусор из-за операции поплавка, выполняемой на int. Это поведение не определено. – Magisch

1

Вы хотите удалить 10% от указанной цены. Итак, ваш расчет будет таким: x = y- (y * 0,1); где y задана цена, а x - новая цена. Вот код:

if (value == 1) { 
    float price = 0, price_final; 

    printf ("INSERT A PRICE >> "); 
    if (scanf ("%f", &price) == 0) { 
     fprintf(stderr, "Invalid price"); 
     exit(EXIT_FAILURE); 
    } 

    price_final = price - (price * 0.1); 
    printf ("Final value %f\n", price_final); 
} 
Смежные вопросы