#include <stdio.h>
void main()
{
int ch,os=0,js=0;
float op=0.0,jp=0.0;
while(scanf("%d",&ch)==1)
{
if(ch==0)
break;
else if ((ch%2)==0)
{
os++;
op=op+ch;
}
else
{
js++;
jp=jp+ch;
}
}
printf("%f %#x %.0f %#x %d %#x %.0f %#x \n",os,&os,op=op/os,&op,js,&js,jp=jp/js,&jp);
}
最后这个显示地址是我加的,为了方便解决问题,大家可以去掉,好了,
进入正题,我们将最后一行的printf中的第一个%f改为%d,那么我们的程序正常运行
在此,我们先不说这个程序的健壮性,我们一般输入两个整数。
好了,如果没有改,那么我们的程序在输入两个整数后,那么我们的输入九会变成零。
很奇怪,但是在程序运行中,他存入的数据时正确的,
上面这个是改为%d的结果,下面这个是%f的结果!
大家可以看结果,从结果得知,,
其中按地址来说,我们第二次读取,的时候,第一个数的地址也应该是
12ff78
12ff78 内存地址中的数据是01 00 00 00
第一个为零,我可以想通,
但是,浮点数和整数的内存都一样,
所以,不应该影响到第二个数字显现呀。
请大家解释为什么换为%d就正常显示,
正确的代码如下
#include <stdio.h>
void main()
{
int ch,os=0,js=0;
float op=0.0,jp=0.0;
while(scanf("%d",&ch)==1)
{
if(ch==0)
break;
else if ((ch%2)==0)
{
os++;
op=op+ch;
}
else
{
js++;
jp=jp+ch;
}
}
printf("%d %#x %.0f %#x %d %#x %.0f %#x \n",os,&os,op=op/os,&op,js,&js,jp=jp/js,&jp);
}
小弟经过研究,,换了一种表示方法
程序如下
#include <stdio.h>
#define N 2
void main()
{
int os=0,js=0,flag,sr;
float op=0.0,jp=0.0;
while (scanf("%d",&sr)==1)
{
if(sr==0)
break;
if((sr%N)==0)
flag=0;
else
flag=1;
switch(flag)
{
case 0: os++;
op=op+sr;
break;
case 1: js++;
jp=jp+sr;
break;
}
}
// printf("%f,%f,%d,%f\n",os,op/os,js,jp/js);
printf("%f %#x %.0f %#x %d %#x %.0f %#x \n",os,&os,op=op/os,&op,js,&js,jp=jp/js,&jp);
}
先在我更郁闷了,为什么程序都差不多。显示的东西都一样,为什么结果会相差那么大?
正在撞墙中,等待解答!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!