二维vector作用域问题:循环内定义无法调用外部printVector函数
问题解决与代码修正
核心问题修正
你的核心问题是二维vector定义在do-while循环内部,导致每次循环都会重新创建空的二维vector,循环结束后无法保留所有输入数据。同时原代码还存在逻辑错误(索引越界、无效循环、函数返回值不匹配),以下是修正后的完整代码:
#include <iostream> #include <string> #include <vector> using namespace std; // 修正函数:返回类型改为void,移除多余参数 void printVector(const vector<vector<char>>& word_rows); int main() { cout << "Enter each word." << endl; cout << "At the end of each word, press Enter" << endl; cout << "When all of the words have been entered, type GO " << endl; string line; // 二维vector移到循环外部,确保能保存所有输入数据 vector<vector<char>> word_rows; cin >> line; do { // 把当前输入字符串转成vector<char> vector<char> word_columns; for (char c : line) { word_columns.push_back(c); } // 将当前字符vector加入二维vector word_rows.push_back(word_columns); cin >> line; } while (line != "GO"); // 循环结束后一次性输出所有内容 printVector(word_rows); } void printVector(const vector<vector<char>>& word_rows) { for (const auto& row : word_rows) { for (char c : row) { cout << c; } cout << endl; } }
关键修改点说明
- 调整二维vector作用域:将
word_rows移到do-while循环外部,确保每次输入的字符串数据都能被追加到同一个容器中,循环结束后可正常访问所有内容。 - 移除无效循环逻辑:原代码中的
count变量和内层for循环存在逻辑错误,会导致重复添加字符甚至索引越界,改用范围for循环遍历输入字符串更简洁安全。 - 修正printVector函数:
- 返回类型从
char改为void,函数仅负责输出无需返回值; - 移除多余的
word_columns参数,二维vector已包含所有行数据; - 使用
const引用传递参数,避免大容器拷贝的性能损耗; - 改用范围for循环遍历,代码更易读且不易出错。
- 返回类型从
- 优化循环终止逻辑:确保输入"GO"时停止循环,且不会将"GO"本身加入到二维vector中。
内容的提问来源于stack exchange,提问作者Juliet Roman
相关产品推荐
相关产品推荐

