int numberofboys, m; cout << "请输入参与约瑟夫的小孩人数"; cin >> numberofboys; cout << endl; cout << "请输出约瑟夫问题的间隔数:"; cin >> m; cout << endl; pfirst = new Kid; pfirst->code = 1; pfirst->pnext = pfirst; pcurrent = pfirst; for (int i = 1; i < numberofboys; i++) { pivot = pcurrent; pcurrent = new Kid; pcurrent->code = i + 1; cout << "请输入第" << i << "个小孩名字"; cin >> pcurrent->name; pivot->pnext = pcurrent; } pcurrent->pnext = pfirst; cout << setw(4) << pfirst->code;//遍历输出 pcurrent = pfirst->pnext; while (pcurrent != pfirst) { cout << setw(4) << pcurrent->code; pcurrent = pcurrent->pnext; } cout << endl; countchildren(pfirst, m); cout << "最后胜利的人:"; cout << setw(4) << pcurrent->code; cout << pcurrent->name; delete pcurrent; }
时间: 2024-03-07 18:52:50 浏览: 44
这段代码是关于约瑟夫问题的,它创建了一个循环链表,表示有一些小孩子围成一圈,每个小孩子都有一个编号和一个名字。然后它从第一个小孩子开始,按照一定的间隔数 m,从链表中删除一个小孩子,直到只剩下最后一个小孩子。最后输出最后剩下的小孩子的编号和名字。其中,countchildren(pfirst, m) 函数的作用是找到最后剩下的小孩子。
相关问题
int numberofboys; cout << "请输入参与约瑟夫的小孩人数"; cin >> numberofboys; cout << endl; string* namearray; namearray = new string [numberofboys];//输入每个小孩的名字 int* array; array = new int[numberofboys]; for (int i = 1; i <= numberofboys; i++) { array[i - 1] = i; } for (int i = 1; i <= numberofboys; i++) { cout << "请输入第 " << i << " 个小孩的名字:"; getline(cin, namearray[i - 1]); // 读取一整行字符串 cout << endl; }为什么第一个名字无法输入
这是因为在输入`numberofboys`后,程序会在缓冲区留下一个回车符。当你在第一个`getline`语句中读取输入时,它会读取该回车符,而不是第一个小孩的名字。
解决这个问题的一种方法是在读取`numberofboys`后添加一个额外的`getline`语句,以清除缓冲区中的回车符。例如,在读取`numberofboys`后,可以添加以下语句:
```cpp
cin.ignore();
```
这将清除缓冲区中的回车符。然后,第一个`getline`语句将读取正确的输入。
int numberofboys; cout << "请输入参与约瑟夫的小孩人数"; cin >> numberofboys; cout << endl; char* namearray; namearray = new char[numberofboys];//输入每个小孩的名字 int* array; array = new int[numberofboys]; for (int i = 1; i <= numberofboys; i++) { array[i - 1] = i; } for (int i = 1; i <= numberofboys; i++) { cout << "请输入小孩名字"; cin >> namearray[i]; cout << endl; }严重性 代码 说明 项目 文件 行 禁止显示状态 警告 C6385 从“namearray”中读取的数据无效: 可读大小为“numberofboys*1”个字节,但可能读取了“2”个字节。 josephus数组 C:\Users\86136\source\repos\josephus\josephus\main.cpp 22
这段代码中出现了一个 C6385 错误,这是因为在输入小孩名字的循环中使用了从 1 开始的索引,导致数组越界。应该从 0 开始遍历数组,即将 `cin >> namearray[i];` 改为 `cin >> namearray[i-1];`。
正确的代码应该是这样的:
```
int numberofboys;
cout << "请输入参与约瑟夫的小孩人数";
cin >> numberofboys;
cout << endl;
char* namearray;
namearray = new char[numberofboys];
int* array;
array = new int[numberofboys];
for (int i = 1; i <= numberofboys; i++)
{
array[i - 1] = i;
}
for (int i = 1; i <= numberofboys; i++)
{
cout << "请输入小孩名字";
cin >> namearray[i-1];
cout << endl;
}
```
阅读全文