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

C++姓名排序程序无法接收输入,请求错误排查

代码错误分析与修正

存在的错误点

  • vector未初始化空间:创建vector<string> strArray;时容器为空,没有任何元素,直接用strArray[c]访问会触发数组越界,这是程序异常的核心原因。
  • 循环次数错误:for (int c = 0; c <= i; ++c)会执行i+1次循环,但实际只需要输入i个姓名,应改为c < i。
  • 输出逻辑错误:排序后仅输出strArray[0]和strArray[i],但strArray[i]属于越界访问(vector下标范围是0到i-1),且未遍历输出所有排序后的姓名。
  • 错误提示位置错误:无论输入的i是否合法,都会输出<Error wrong class size>,应将这段提示放在else分支中,仅当i不满足0 < i <26时显示。

修正后的代码

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

using namespace std;

int main ()
{
    int i;
    cout << "How many students:" << endl;
    cin >> i;

    if (i > 0 && i < 26)
    {
        vector<string> strArray;
        // 预留空间优化性能,也可直接使用push_back
        strArray.reserve(i);
        for (int c = 0; c < i; ++c)
        {
            cout << "Name: ";
            string name;
            cin >> name;
            strArray.push_back(name);
        }

        sort(strArray.begin(), strArray.end());
        
        cout << "Sorted names:" << endl;
        for (const string& name : strArray)
        {
            cout << name << endl;
        }
    }
    else
    {
        cout << "<Error wrong class size>";
    }

    return 0;
}

关键修正说明

  1. 使用push_back向vector添加元素,无需提前分配空间(也可通过strArray.resize(i)初始化空间后用下标赋值,但push_back更安全)。
  2. 修正循环条件为c < i,确保仅输入i个姓名。
  3. 用范围for循环遍历输出所有排序后的姓名,彻底避免下标越界问题。
  4. 将错误提示移至else分支,仅在班级人数输入不合法时触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:15:33