马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在学习小甲鱼C语言的视频里,第一节最后给了一段比较两个数大小的程序,我在自己练习的时候,把 x,y,z的类型误写成了double,程序如下:#include <stdio.h>
#include <math.h>
int max(int a,int b);/*函数说明*/
void main()
{
double x,y,z;
int max(int a,int b);
printf("Input two numbers:\n");
scanf("%d%d",&x,&y);
z=max(x,y);
printf("%d %d Maximum=%d",x,y,z);
}
int max(int a,int b)
{
if (a>b)
return a;
else
return b;
}
然后我输入两个数3和7,打印出来的 结果是 3 7 Maximum=0,虽然这个程序存在变量的类型和输入的数据类型不匹配的问题,但我想请教一下为什么会造成max返回值是0?
接着我又输入了3.5 7.8,打印出来的结果是3 41 Maximum=0,这里为什么x,y的值变成了3和41呢?这个41从哪来的??
还请各位高手能答疑解惑,感谢
这里面涉及到两个问题
1、scanf读取问题。
里面写的是两个%d,但是你输入的是3.5,这样scanf读取的时候第一个变量读取到了3,第二个变量读取的时候遇到了'.',没有读到int类型数据, 然后就没有给y赋值,y值是不固定的,看运气,程序分配给y的那个单元原来是什么就会输出什么
2、不同类型存储问题
double类型变量占8个字节,int类型变量占4个字节(与系统位数有关)。所以double类型数据已int输出的时候实际上输出的是元数据的一部分内容
具体输出什么,怎么输出,可以看看这个帖子,讲了各个类型数据的存储
|