【问题标题】:Cant printout the result of this program无法打印此程序的结果
【发布时间】:2020-10-19 13:38:02
【问题描述】:

我是 C 语言的新手,我正在尝试制作一个能够获取十进制数并打印出最接近该十进制数的程序,但是,当我尝试运行该程序时,它只询问我十进制数,仅此而已。

# include<stdio.h>
int main()
{
    float num;
    printf("Enter a double number: ");
    scanf("%d", num);
    int r=0;
    if(num<0)
    {
        r=r+num-0.5;
    }
    else
    {
        r=r+num+0.5;
    }
    printf("The closest integer to %d: %d", num, r);

    return 0;
}

如果您能帮助我找到我的程序存在的问题,我将不胜感激。谢谢!

【问题讨论】:

  • 请注意编译器警告:scanf("%d", num); 应该是 scanf("%f", &amp;num); 然后在 printf() 中,您再次使用 %d 但传递了 float

标签: c printing


【解决方案1】:

您的程序中有多个问题。首先看一下this的图表,你使用的变量类型不对。您打算从stdin 接收浮点数,但您正在扫描%d,这是一个普通整数。请改用%f。这也是打印输出时的问题。

scanf("%f", &num); // more about the & later

第二件事,你可能还不习惯指针和内存处理,但是如果你有一个简单的数据结构——比如intfloat 等等——你必须扫描你的数据,然后写它在为您的变量分配的内存中,因此您必须通过 &amp;num 传递 num 的内存地址。

scanf("%f", &num); // you are passing the memory address of your variable

您可以通过以下方式试用:

printf("%p\n", (void*)&num);

(How to printf a memory location)


完整的工作示例:

# include <stdio.h>

int main() {
    float num;
    
    printf("Enter a double number: ");
    scanf("%f", &num);

    int r=0;
    if(num<0) {
        r=r+num-0.5;
    }else {
        r=r+num+0.5;
    }

    printf("The closest integer to %f: %d", num, r);

    return 0;
}

这些错误不应该终止程序,只会产生错误的结果。如果您还有其他问题,请告诉我。

【讨论】:

    【解决方案2】:

    只需对您的代码进行一些更正:

    1. 您要求的是浮点类型的十进制数。因此,在 scanf 读取浮点数据类型时,您必须使用 %f 而不是用于整数数据类型的 %d。在最后一个 printf 语句中也是如此。

    2. 在 scanf 语句中,您应该使用 &num 而不是 num。您必须指向您尝试获取输入的变量的内存位置。

    这是正确的代码。

    # include<stdio.h>
    int main()
    {
        float num;
        int r = 0;
        printf("Enter a double number: ");
        scanf("%f", &num);
    
        if(num < 0)
        {
            r = r+num-0.5;
        }
        else
        {
            r = r+num+0.5;
        }
        printf("The closest integer to %f is %d\n", num, r);
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2017-07-18
      • 2021-09-13
      • 1970-01-01
      相关资源
      最近更新 更多