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
相关产品推荐
相关产品推荐

