C++随机字符串生成器故障求助:无法输出随机字符串
问题分析与修复
你的程序存在几个关键问题,导致无输出或运行异常:
- 随机数种子未初始化:
rand()默认用固定种子,每次运行生成完全相同的随机序列。必须用当前时间初始化种子,才能得到不同的随机结果。 - 数组长度计算错误:
sizeof(lmao)/sizeof(int)逻辑错误,lmao是string数组,正确的元素个数计算应为sizeof(lmao)/sizeof(lmao[0])。原计算会得到远大于实际数组长度的数值,导致随机索引越界访问内存,直接引发程序崩溃。 - 未输出目标随机字符串:你的代码只打印了"Fail"或拼写错误的"Succes",完全没有输出你需要的随机字符串本身。
- 随机数函数逻辑易混淆:原
randomNumber的参数命名和取值范围容易引发误解,建议明确为生成符合数组索引范围的随机数。
修正后的代码
#include <iostream> #include <cstdlib> #include <ctime> #include <string> using namespace std; // 生成[start, end)范围内的随机整数(适配数组索引) int randomNumber(int start, int end) { return start + rand() % (end - start); } int main() { // 用当前时间初始化随机数种子,确保每次运行结果不同 srand(time(nullptr)); string lmao[] = {"xd", "hahaha","","fjdskl", "fjdskl", "fjkdsljfkdsl","uuruur","fjdksl"}; // 正确计算数组元素个数 int arrLen = sizeof(lmao) / sizeof(lmao[0]); string lastZ = ""; for (int i = 0; i <= 10; i++) { int y = randomNumber(0, arrLen); string z = lmao[y]; if (z == lastZ) { cout << "Fail: 重复选中字符串 [" << z << "]\n"; } else { lastZ = z; cout << "Success: 随机字符串 -> " << z << "\n"; } } return 0; }
内容的提问来源于stack exchange,提问作者avixis12
相关产品推荐
相关产品推荐

