c++ primer plus 里面第六章isdigit用法的一些疑问,初学者,脑残见谅

楼主在做这本书第六章课后习题时有些不理解这两段代码
代码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