gpt4 book ai didi

c++ - 代码在运行时崩溃,但在调试时不会崩溃

转载 作者:行者123 更新时间:2023-12-03 02:29:56 26 4
gpt4 key购买 nike

我应该编写一种拼字游戏,但我有一个大问题。我应该为每个玩家提取一张包含字母的卡片,以便决定谁开始游戏。然后,我必须再次将卡放入包中。但是,当我运行该程序时,它崩溃了,但是当我使用调试时它可以工作。有人可以帮我吗?

#include <cstdlib>
#include <ctime>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

char letterarand(char *firstelementarray, int numelement, vector<int> &pos)
{
srand(time(NULL));
int n = rand() % 100; // 0 - 99
pos.push_back(n);
if (firstelementarray[n] == '0') {
pos.pop_back();
letterarand(firstelementarray, numelement, pos);
}
return firstelementarray[n];
}

void order(vector<char> &letters, vector<string> &name, int num, vector<int> &positions)
{
for (int i = 0; i < num; ++i) {
cout << letters[i] << endl;
}
for (int i = 0; i < num - 1; ++i) {
for (int j = i; j < num; ++j) {
if (letters[i] > letters[j]) {
char temp = letters[i];
letters[i] = letters[j];
letters[j] = temp;
string swap = name[i];
name[i] = name[j];
name[j] = swap;
int temp2 = positions[i];
positions[i] = positions[j];
positions[j] = temp2;
}
}
}
}

void insert(char *firstelementarray, int numplayers,
vector<int> positions, vector<char> extract)
{
for (int i = 0; i < numplayers; ++i) {
cout << extract[i] << " " << positions[i] << endl;
}
int j = 0;
for (int i = 0; i < numplayers; ++i) { //letters extracted are trasformed in '0'
firstelementarray[positions[i]] = extract[j];
++j;
}
}

int main()
{
cout << " UPWORDS: "
<< endl;
cout << endl;
char c = '0';
vector<string> players;
string playersname;
cout << "Number of player (2-4):" << endl;
cin >> c;
while ((!(c >= '2' && c <= '4'))) {
cin >> c;
}
int playersnum = c - '0';
vector<char> extract;
char bag[100] = {
'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'D',
'D', 'D', 'D', 'D', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'F', 'F', 'F',
'G', 'G', 'G', 'H', 'H', 'H', 'I', 'I', 'I', 'I', 'I', 'I', 'I', 'J', 'K',
'K', 'L', 'L', 'L', 'L', 'L', 'M', 'M', 'M', 'M', 'M', 'N', 'N', 'N', 'N',
'N', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'P', 'P', 'P', 'Q', 'R', 'R', 'R',
'R', 'R', 'S', 'S', 'S', 'S', 'S', 'S', 'T', 'T', 'T', 'T', 'T', 'U', 'U',
'U', 'U', 'U', 'V', 'W', 'W', 'X', 'Y', 'Y', 'Z'};
vector<int> positions;
cout << "name players: " << endl;
for (int i = 0; i < playersnum; ++i) {
cout << "player " << i + 1 << " :";
cin >> playersname;
players.push_back(playersname);
extract.push_back(letterarand(bag, 100, positions));
bag[positions[i]] = '0';
}
order(extract, players, playersnum, positions);
insert(bag, playersnum, positions, extract);
}

最佳答案

从字面上看,递归代码很难理解。我可以建议:

char letterarand(char *firstelementarray, int numelement, vector<int> &pos)
{
srand(time(NULL)); // should only be done once! Move to main

// chose random letter, not previously chosen
int n
do {
n = rand() % 100; // 0 - 99
} while( firstelementarray[n] == '0';
char letter = firstelementarray[n];

// mark letter as chosen
firstelementarray[n] = '0';

pos.push_back(n);
return letter;
}

关于c++ - 代码在运行时崩溃,但在调试时不会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52098565/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com