不厭徐何 2023-03-17 19:47 采纳率: 56.5%
浏览 29
已结题

不知道程序哪里出错了,如何解决?

题目:在全系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);

  • 写回答

3条回答 默认 最新

  • 追cium 2023-03-17 19:50
    关注

    参考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元。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探