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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:03