题目:在全系10000学生中,当捐款总数达到100000元就结束,统计此时捐款的人数,以及平均每人捐款的数目。
float total,amount,aver; //total为捐款总数,amount为每个人捐款数目
int i;
for(i=1,total=0;total<100000&&i<=10000;){
printf("捐款数量:");
scanf("%f\n",&amount);
total+=amount;
i++;
}
aver=total/i;
printf("捐款人数:%d\n",i);
printf("平均每人捐款的数目:%f\n",aver);
参考GPT和自己的思路:
根据你提供的程序,我发现问题可能出现在第5行的scanf函数上。scanf函数在录入输入时容易产生错误,比如录入了无效字符或者遗漏了输入等等,因此建议你在scanf前加一个缓冲区清空操作,例如:
1. float total,amount,aver; //total为捐款总数,amount为每个人捐款数目
2. int i;
3. for(i=1,total=0;total<100000&&i<=10000;){
4. printf("捐款数量:");
5. fflush(stdin); // 清空输入缓冲区
6. scanf("%f",&amount);
7. if(amount<=0){
8. printf("请录入一个大于0的捐款金额\n");
9. continue;
10. }
11. total+=amount;
12. i++;
13.}
14.aver=total/i;
15.printf("捐款人数:%d\n",i-1);
16.printf("平均每人捐款的数目:%f\n",aver);
另外,为了避免无效输入,我们可以增加一些输入验证,如在第7行判断输入的amount是否小于等于0,如果小于等于0,则要求重新输入,这可以用continue来实现。最后,你在输出捐款人数时,应该将i-1,因为最后一次输入的总金额可能已经超过了100000元。
scanf中的\n删掉就行了
if (total+amount > 100000)
total+=amount; break;
你那样写超了