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

C++程序随机抽取姓名仅输出单个字符的修复请求

修复C++随机抽取完整姓名的问题

你的代码核心问题出在随机输出的语句上:

cout << nama[random_name] << endl;

这里的nama是你最后一次输入的单个姓名字符串,nama[random_name]会取这个字符串中索引为random_name的字符,所以才会输出单个字符,而非完整的随机姓名。

修复步骤

  • 修正输出语句:把nama[random_name]替换为names[random_name]——names是存储所有输入姓名的vector,通过随机索引可以直接取出完整的姓名字符串。
  • 清空vector避免数据累积:每次循环开始时调用names.clear();,否则第二次运行程序时,vector会保留上一次输入的姓名,导致随机范围错误。

修复后的完整代码

#include <iostream>
#include <algorithm>
#include <conio.h>
#include <vector>
#include <time.h>

using namespace std;

int main()
{
    int jumlah_orang;
    char user3;
    vector<string> names;
    string nama;
    srand(time(NULL));
    do
    {
        system("cls");
        names.clear(); // 清空之前的姓名数据,避免累积
        cout << "Jumlah Orang: "; cin >> jumlah_orang;
        cin.ignore();
        for(int i = 0; i < jumlah_orang; i++)
        {
            cout << "Nama ke-" << i+1 << ": ";
            getline(cin, nama);
            names.push_back(nama);
        }
        cout << "\nNama:\n";
        for(int i = 0; i < names.size(); i++)
        {
            cout << names[i] << endl;
        }
        int random_name = rand() % names.size();
        cout << "Pilihan Acak: " << names[random_name] << endl; // 输出完整随机姓名
        cout << "\nUlang Program? (Y/T): "; 
        cin >> user3;
    }
    while(user3 == 'Y' || user3 == 'y');
    getch();
}

关键修改说明

  • names.clear()确保每次循环都从空vector开始,旧数据不会干扰新的随机抽取逻辑。
  • names[random_name]直接访问vector中对应索引的完整字符串,完美实现随机抽取完整姓名的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:40:26