C语言编程小问题解决

C语言编程小问题解决

遇到的问题:

image-20260501231442660

编译器的警告已经明确指出了问题:

format '%d' expects argument of type 'int *', but argument 2 has type 'long int *'

  • 定义的变量 along 类型,但 scanf("%d", &a); 中用了 %dint 类型的格式符),两者类型不匹配,这是C语言中非常常见的类型安全问题。
  • 同时,printf 里也存在一个隐患:printf("%ld的立方为:%ld",a,b); 中第二个格式符用了 %ld,但 blong 类型,也应该用 %ld

修正后的完整代码

#include<stdio.h>

long cube(long x)
{
    long z;
    z = x * x * x;
    return z;
}

int main()
{
    long a, b;
    printf("请输入一个整数:");
    // 1. scanf 中 long 类型用 %ld
    scanf("%ld", &a);
    b = cube(a);
    // 2. printf 中 long 类型也用 %ld
    printf("%ld的立方为:%ld\n", a, b);
    return 0;
}

关键知识点

数据类型 scanf 格式符 printf 格式符
int %d %d
long %ld %ld
float %f %f
double %lf %f

补充说明

  • 这个警告如果不修复,在某些平台上会导致读取错误、变量值异常,甚至引发更严重的内存问题。
  • 如果只是需要处理普通整数,也可以把 long 改成 int,这样就可以一直用 %d,代码会更简单:
    int cube(int x)
    {
        return x * x * x;
    }
    
    int main()
    {
        int a, b;
        printf("请输入一个整数:");
        scanf("%d", &a);
        b = cube(a);
        printf("%d的立方为:%d\n", a, b);
        return 0;
    }
    
posted @ 2026-05-01 23:20  Q&25  阅读(31)  评论(1)    收藏  举报