问题描述
- 本人新手,请问有哪个大神知道为什么这个代码中num只能取到8.
- #include
#include
int main()
{
using namespace std;
double donation[10]aversum;
int minum;
sum=0.0;
m=0;
cout << ""input the numbers ; and no more than 10!n"";
for(i =0num=0;i {
cin >> donation[i];
if (!isalpha(donation[i]))
{
sum=sum+donation[i];
++num;
}
}
aver =sum/num;
for(i=0;i<num;i++)
if(aver<donation[i])
++m;
cout << ""the aver is : "" << aver << endl << ""the number is : ""<< m << endl;
return 0;
}
例如:输入 23 ,12, 34 ,35,56,67,45,34,23,67
运行的结果是错误;调试的时候发现num只能取到8,取不到10,但是i可以取到10,num只能取到8.
解决方案
什么叫取到8,这个代码可以取到10aver =sum/(double)num;if (!isalpha(donation[i]))因为你的判断写在循环里面,所以如果你输入不是数字,那么循环的次数是10,但是数字可能少于10。你的循环条件for(i =0num=0;i<10;i++)->for(i =0num=0;num<10;i++)
解决方案二:
我也认为应该取到10,可是运行的结果是错误;调试的时候发现num只能取到8,取不到10,但是i可以取到10,num只能取到8.
解决方案三:
编程是一种美德,是促使一个人不断向上发展的一种原动力。
解决方案四:
isalpha 是C库函数么?如果是的
if (!isalpha(donation[i])){。。。}
donation[i]是 double
所以必须输入整数(值为整数的 浮点数)
因为52 Bits 内的整数,浮点数表示无误差
所以,最终还是输入的整数
范围在(a~z) 65~90,和(A~Z) 97~122
解决方案五:
搞错了,范围不在(a~z) 65~90,和(A~Z) 97~122 之间才行
解决方案六:
转换位整数。结果 不在(a~z) 65~90,和(A~Z) 97~122 之间才行
解决方案七:
if (!isalpha(donation[i])) 好奇怪的判断啊 浮点数,为何要判断这个?
解决方案八:
你的两个 67 其实都是 'c'
此时 if (!isalpha(donation[i]))为假,
所以 num 只有8个
时间: 2024-09-19 21:06:05