C++ string数组以指针传参后读取无显示问题咨询
问题排查与修复方案
问题产生原因
- 函数参数未定义变量名:
enterFactoryNames的参数仅声明了string*类型,没有设置变量名,无法在函数内访问传入的数组。 - 未将输入值写入目标数组:函数内读取到的工厂名称存储在局部变量
FacNames中,从未赋值给传入的数组元素,函数执行结束后factoryNames数组仍为初始空值,自然无法读取到有效内容。 - 循环下标不匹配数组规则:函数内循环变量
i从1到SIZE,而C++数组下标从0开始,即便能写入数组也会出现越界、遗漏第一个元素的问题。 - 混合输入方式残留换行符:调用
enterFactoryNames后使用的cin >> years会将用户输入数字后的换行符留在输入缓冲区,若后续使用getline读取工厂数据会直接读到空行,需要提前清理缓冲区。
修复方案
1. 修改function.cpp的enterFactoryNames函数
需要补充参数变量名、调整循环下标、把输入值写入目标数组,修改后代码如下:
#include <string> #include <iostream> using namespace std; // 给指针参数添加变量名arr void enterFactoryNames(string* arr) { string FacNames; // 调整下标从0开始,匹配C++数组索引规则 for(int i = 0; i < SIZE; i++) { cout << "Name of Factory " << i+1 << " : "; getline(cin, FacNames); // 将输入的工厂名写入传入的数组对应位置 arr[i] = FacNames; cout << endl; } }
2. 可选:清理输入缓冲区残留换行
如果后续需要继续用getline输入每个工厂的对应数据,需要在cin >> years后添加缓冲区清理代码,避免读空:
#include <limits> // 需提前引入该头文件使用numeric_limits // ... 原有main函数代码 cin >> years; // 清理输入缓冲区中残留的换行符 cin.ignore(numeric_limits<streamsize>::max(), '\n'); // ... 后续输入代码
修改后原有的*(factoryNames+x)遍历逻辑无需调整,即可正常读取到输入的工厂名称。
内容的提问来源于stack exchange,提问作者Tommy
相关产品推荐
相关产品推荐

