我有代码,我在文件中搜索,将每一行分配给一个数组,然后根据每个组要多少人来随机输出组。 例如:如果用户每组输入2个人,并且列表中有50个人,那么将有25组2人。
沿线某处存在分段错误,但我不知道它在哪里或什么。
using namespace std;
int peoplePerGroup;
int count = 0;
int groupNum;
void group();
string names[50];
int main() {
cout << "How many people do you want per group: ";
cin >> peoplePerGroup;
string line;
ifstream myfile("names.txt", ios::in);
if (myfile.is_open()) {
int i = 0;
while (getline(myfile, line)) {
if (i < 50) {
names[i] = line;
i++;
} else
continue;
}
myfile.close();
}
group();
return 0;
}
void group() {
int i, j = 0;
while (j < 50) {
srand(time(NULL));
int random[50];
int k;
random[k] = rand() % 50;
groupNum = 1;
if (peoplePerGroup < i) {
groupNum++;
i = 0;
cout << "Group " << groupNum << " has: ";
cout << names[random[k]] << " ";
names[random[k]] = "done";
j++, i++;
}
if (peoplePerGroup >= i) {
if (names[random[k]] != "done") {
cout << " " << names[random[k]] << " ";
names[random[k]] = "done";
j++, i++;
}
}
k++;
}
}
答案 0 :(得分:0)
正如评论中已经指出的那样。 i
和k
未初始化。因此,不能保证它们将为0,这是您在代码中期望的。它们可以是int可以的任何东西。
如果需要,您可以添加
std::cout << k << " " << i << std::endl;
在int k
之后,看看自己。
如果我运行它,我的i
和k
大约在32000左右。
random[k] = rand() % 50
它崩溃了。将来,如果您遇到类似的问题,可能要使用调试器,然后启动程序,如果程序崩溃了,您将确切地看到崩溃的位置,并查看当前作用域内所有可用变量的值。