代码打印额外的内存垃圾

时间:2015-10-12 13:57:56

标签: c clang++

此代码正在打印额外的内存垃圾。我该怎么办呢? 在这段代码中,我试图删除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);
}

3 个答案:

答案 0 :(得分: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中删除int(0.01),这是未定义的,因此我将这两个变量都更改为float

此外,我建议您先使用fgets阅读一行,然后使用sscanf解析字符串:

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

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

答案 1 :(得分: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);
}

答案 2 :(得分:0)

这有很多问题。

首先:

<input data-validate="number" value="<?php echo ($value != '0' ? $value : ''); ?>" class="form-control">

您正在对未定义的整数执行浮点运算。

第二

您在阅读用户价格之前计算新价格。这是荒谬的,int price_final = (price - (price - 0.01); 将始终在您的代码中假设price

第三

0

缺少结束括号&#39;)&#39;

可能会有更多,但这三个显然是显而易见的。

相关问题