953636869 发表于 2014-1-26 18:25:13

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

题目:在全系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;}http://a.hiphotos.baidu.com/zhidao/wh%3D600%2C800/sign=12699a67718da9774e7a8e2d8061d421/d000baa1cd11728b1fe9d576cafcc3cec2fd2c99.jpg

牡丹花下死做鬼 发表于 2014-1-26 18:53:42

float 应该用 %f 而不是 %lf

953636869 发表于 2014-1-27 09:41:53

牡丹花下死做鬼 发表于 2014-1-26 18:53 static/image/common/back.gif
float 应该用 %f 而不是 %lf

哦 对改为%f 果然可以了 但是想追问下为什么双精度的话他会无限循环下去呢   我觉得我前者定义为float 后者写成%lf 编译器应该报错的

庸人自忧灬 发表于 2014-1-28 20:01:40

吧if语句挪到上面去 c语言顺序性。

故乡的风 发表于 2014-1-30 00:53:26

953636869 发表于 2014-1-27 09:41 static/image/common/back.gif
哦 对改为%f 果然可以了 但是想追问下为什么双精度的话他会无限循环下去呢   我觉得我前者定义为fl ...

一般编译器不会报错,但是会有警告。对于这个%lf 和 amount的问题,函数会将你输入的值转换成双精度的方式存储在amount所在的内存中,但是使用amount时却是采用的单精度的方式解读的,所以两个值是不同的。
如果你对指针理解比较深的话,这个问题就好说了。我举个例子,假设int 和float均32位,我输入1存在一段内存中,它在内存中以二进制保存就是00000000 00000000 00000000 00000001,按照int来解读这段数据解读毫无疑问是1,但是按照float的存储规则来解读,这个就是0.000000(写的测试程序得到的结果)。你的问题和这个就是一样的。
页: [1]
查看完整版本: C语言 写一程序发现它无限循环下去 但是没找到原因 希望大神来解决下