楼主在做这本书第六章课后习题时有些不理解这两段代码
代码1:isdigit的使用目的是识别出数字,把数字掠过而仅处理剩下的字符
while(ch!='@')
{
if(isdigit(ch))
cin.get(ch);
else
{
if(islower(ch))
ch=toupper(ch);
else
ch=tolower(ch);
cout< cin.get(ch);
}
代码2:isdigit的使用目的是识别出是数字的字符,将其输入数组并累加求和,这个是网上下载的答案中给的范例,经验证确该如此
while(cin>>temp&&i<10&&!isdigit(temp))
{
num[i]=temp;
sum+=num[i];
++i;
}
我不理解为什么代码2中同样是要分理出属于数字的字符,但是它用的却是加了!的isdigit,这样一来不应该在temp为数字的时候出现!isdigit(temp)为零而让while没法按设计循环的结果吗
应该是打错了,没有否!
以运行结果为准。程序总有bug,包括书上的。
就是真的跑下来,发现应该有个!,我把代码二copy下来,如果你们有兴趣的话试一试感受下,我已经魔能了
#include
#include
using namespace std;
int main()
{
double donation[10];
int numb=0;
double ch;
cout << "Please enter at most 10 donations.\n";
double sum=0.0;
while (cin >> ch&&numb<=10&&!isdigit(ch))//就是这个神奇的地方,把"!"去了就美丽,加上又能用了
{
donation[numb]=ch;
sum=sum+donation[numb];
++numb;
}
int counter2=1;
int bigger=0;
double ave=sum/numb;
while (counter2 <= numb)
{
if(donation[counter2-1]>ave)
++bigger;
++counter2;
}
cout << "The average of donations is " << ave << " and there are/is " << bigger;
cout << " numbers larger than the average.";
cout << " " << numb << " " << sum;
return 0;
}
那个是我根据书上答案改编的,没有用到书上的array类,不过一样能用,前面程序头是和,不知道怎么回事没有复制上去
怒了!是iostream和cctype