C语言编程小问题解决
C语言编程小问题解决
遇到的问题:

编译器的警告已经明确指出了问题:
format '%d' expects argument of type 'int *', but argument 2 has type 'long int *'
- 定义的变量
a是long类型,但scanf("%d", &a);中用了%d(int类型的格式符),两者类型不匹配,这是C语言中非常常见的类型安全问题。 - 同时,
printf里也存在一个隐患:printf("%ld的立方为:%ld",a,b);中第二个格式符用了%ld,但b是long类型,也应该用%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; }
浙公网安备 33010602011771号