You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++代码执行异常:Task 2未运行,Herdtotalweek未初始化求助

问题分析与修复方案

咱们直接拆解你遇到的两个核心问题:Task 2 完全没执行,以及 Herdtotalweek 未初始化的警告,这些都源于代码里的几个逻辑错误,我来逐个说明并修复:

1. 为什么 Task 2 根本没机会执行?

你在 Task 1 里犯了数组越界+逻辑遗漏的错误,直接导致程序在 Task 1 执行完就崩溃了:

  • 原代码里,你把每日产奶量的赋值放在了内层循环(Day循环)的外面,这意味着你只保存了最后一天(第7天)的产奶量,前面6天的数据全丢了;
  • 更严重的是,内层循环结束后 Day 的值是8,你用 ((count - 1) * 7) + Day 作为 DailyYield 的索引——比如当 count=1 时,索引是 0*7+8=8,但 DailyYield 的大小是 Herdsize *7,比如Herdsize=1时数组只有7个元素(索引0-6),这直接触发数组越界,程序崩溃,自然到不了Task 2。

2. 未初始化变量的问题

  • WeeklyYieldpercow 数组未初始化:你直接用 WeeklyYieldpercow[count] = WeeklyYieldpercow[count] + ... 累加,但数组创建时没有初始化,里面都是随机垃圾值,结果完全错误;
  • Herdtotalweek 未初始化:Task 2 里直接拿它做累加,初始值是随机的,这就是编译器警告的原因。

修复后的完整代码

我把所有错误都修正了,还优化了逻辑(比如数组索引从0开始,更符合C++规范):

#include <iostream>
#include <string>
using namespace std;

int main() {
    // Task 1
    int Herdsize;
    int Day;
    float MilkYield1;
    float MilkYield2;
    int count;

    cout << "Please input herd size" << endl;
    cin >> Herdsize;
    while (Herdsize < 1 || Herdsize > 900) {
        cout << "Please re-input herdsize between 1 and 900" << endl;
        cin >> Herdsize;
    }

    // 数组索引从0开始,避免逻辑混淆
    int CowID[Herdsize];
    float DailyYield[Herdsize * 7];
    // 初始化每周产奶量数组为0,解决垃圾值问题
    float WeeklyYieldpercow[Herdsize] = {0};

    for (count = 0; count < Herdsize; count++) {
        cout << "Input 3 digit cow id: ";
        cin >> CowID[count];
        // 修正验证条件:确保是真正的3位数(100-999)
        while (CowID[count] < 100 || CowID[count] > 999) {
            cout << "Please re-input a 3 digit cow id: " << endl;
            cin >> CowID[count];
        }

        // 把每日产奶量的逻辑放到内层循环里,保存每天的数据
        for (Day = 0; Day < 7; Day++) {
            cout << "Please input first milk yield of cow " << count+1 << ", day " << Day+1 << ":" << endl;
            cin >> MilkYield1;
            cout << "Please input second milk yield day " << Day+1 << ", if no second yield enter 0:" << endl;
            cin >> MilkYield2;

            // 计算当日总产奶量并存入数组
            int dailyIndex = count * 7 + Day;
            DailyYield[dailyIndex] = MilkYield1 + MilkYield2;
            // 累加进该奶牛的每周总产奶量
            WeeklyYieldpercow[count] += DailyYield[dailyIndex];
        }
    }

    // TASK 2
    float Herdtotalweek = 0; // 初始化总产奶量为0,解决未初始化警告
    float Averagevolume;

    // 修正循环条件:遍历所有奶牛
    for (count = 0; count < Herdsize; count++) {
        Herdtotalweek += WeeklyYieldpercow[count];
    }

    Averagevolume = Herdtotalweek / Herdsize;
    // 用static_cast更规范地做类型转换
    int Herdtotalweekwhole = static_cast<int>(Herdtotalweek + 0.5);
    int Averagevolumewhole = static_cast<int>(Averagevolume + 0.5);

    cout << "Total weekly volume = " << Herdtotalweekwhole << endl;
    cout << "Average volume = " << Averagevolumewhole << endl;

    return 0;
}

关键修复点总结

  • 把每日产奶量的赋值逻辑移到内层循环中,确保每天的数据都被保存,同时避免数组越界;
  • 初始化了 WeeklyYieldpercow 和 Herdtotalweek 为0,彻底解决未初始化的问题;
  • 修正奶牛ID的验证条件,确保输入的是真正的3位数;
  • 数组索引改为从0开始,符合C++常规写法,减少逻辑混淆;
  • 优化了输出提示信息,更清晰易懂。

内容的提问来源于stack exchange,提问作者Aloysius Rebeiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:04:41