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
float 应该用 %f 而不是 %lf 牡丹花下死做鬼 发表于 2014-1-26 18:53 static/image/common/back.gif
float 应该用 %f 而不是 %lf
哦 对改为%f 果然可以了 但是想追问下为什么双精度的话他会无限循环下去呢 我觉得我前者定义为float 后者写成%lf 编译器应该报错的 吧if语句挪到上面去 c语言顺序性。 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]