鱼C论坛

 找回密码
 立即注册
查看: 2874|回复: 3

C语言 写一程序发现它无限循环下去 但是没找到原因 希望大神来解决下

[复制链接]
发表于 2014-1-26 18:25:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

题目:在全系1000学生中,征集善款,当总数达到1000元时结束,统计此时捐款人数,以及平均每人捐款的数目。

#include<stdio.h>


int main()

{

int i;                            //i为人数

float aver,amoumt,total;            //aver为每人平均捐款数目

                               //amount为每个人捐款数

                               //total为捐款总数

for(i=1,total=0;i<=1000;i++)

{

         printf("input a amoumt:");

    scanf("%lf",&amoumt);

         total=total+amoumt;

         if(total>=1000)

         break;


}

aver=total/i;

printf("捐款人数%d",i);

printf("平均捐款数目%lf",aver  );

return 0;

}


                               
登录/注册后可看大图


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-26 18:53:42 | 显示全部楼层
float 应该用 %f 而不是 %lf
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-27 09:41:53 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-1-26 18:53
float 应该用 %f 而不是 %lf

哦 对  改为%f 果然可以了 但是想追问下  为什么双精度的话  他会无限循环下去呢   我觉得我前者定义为float 后者写成%lf 编译器应该报错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-28 20:01:40 | 显示全部楼层
吧if语句挪到上面去 c语言顺序性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-1-30 00:53:26 | 显示全部楼层
953636869 发表于 2014-1-27 09:41
哦 对  改为%f 果然可以了 但是想追问下  为什么双精度的话  他会无限循环下去呢   我觉得我前者定义为fl ...

一般编译器不会报错,但是会有警告。对于这个%lf 和 amount的问题,函数会将你输入的值转换成双精度的方式存储在amount所在的内存中,但是使用amount时却是采用的单精度的方式解读的,所以两个值是不同的。
如果你对指针理解比较深的话,这个问题就好说了。我举个例子,假设int 和float均32位,我输入1存在一段内存中,它在内存中以二进制保存就是00000000 00000000 00000000 00000001,按照int来解读这段数据解读毫无疑问是1,但是按照float的存储规则来解读,这个就是0.000000(写的测试程序得到的结果)。你的问题和这个就是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 00:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表