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
相关产品推荐
相关产品推荐

