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

C++编写vector偶数求和、奇数乘积程序时报变量未在作用域声明错误求助

编译错误修复方案

错误根因

  • 作用域问题:你把std::vector<int> num定义在了while循环内部,每次循环都会新建一个空的vector,循环结束后这个变量就销毁了,所以后续遍历的时候编译器提示num未声明。同理even和odd变量你是在for循环的if/else块里定义的,出了块就销毁了,外部访问不到,自然会提示这两个变量未声明。
  • 循环越界:遍历vector的条件写了i <= num.size(),vector的下标从0开始,最大有效下标是num.size()-1,等于size的时候已经越界了,会触发运行时错误。
  • 逻辑不符:题目要求计算奇数的乘积,你代码里写的是奇数求和,而且累加/累乘变量没有初始化,直接运算会出异常。
  • 输入逻辑错误:进入while循环后你没有再读取用户输入的退出指令,程序会一直卡在输入数字的死循环里。

修复后代码

#include <iostream>
#include <vector>
#include <string>

int main()
{
    std::cout << "本程序用于计算偶数的和与奇数的乘积\n";
    std::cout << "输入f即可结束输入\n";
    std::string ans;
    int k;
    // 把vector定义移到循环外,全局存储输入的数字
    std::vector<int> num;

    while (std::cin >> ans && ans != "f") {
        std::cout << "请输入数字:";
        std::cin >> k;
        num.push_back(k);
        std::cout << "输入f可退出,输入其他内容继续输入数字\n";
    }

    std::cout << "感谢使用本程序\n"
              << "计算结果如下:\n";
    // 提前定义累加、累乘变量,设置正确的初始值
    int even_sum = 0;
    int odd_product = 1;
    // 修正循环边界,避免越界
    for (int i = 0; i < num.size(); i++) {
        if (num[i] % 2 == 0) {
            even_sum += num[i];
        } else {
            odd_product *= num[i];
        }
    }

    std::cout << "偶数和为:" << even_sum << "\n";
    std::cout << "奇数乘积为:" << odd_product << "\n";
    return 0;
}

内容的提问来源于stack exchange,提问作者Pranav Aggarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:03