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; }为什么第一个名字无法输入
时间: 2024-03-06 18:50:46 浏览: 42
这是因为在输入`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;
}
```
#include <iostream> using namespace std; int main() { cout<<" *"<<endl; cout<<" ***"<<endl; cout<<" *****"<<endl; cout<<" *"<<endl; cout<<" ***"<<endl; cout<<" *****"<<endl; cout<<" *******"<<endl; cout<<" *"<<endl; cout<<" ***"<<endl; cout<<" *****"<<endl; cout<<" *******"<<endl; cout<<" *********"<<endl; cout<<" *"<<endl; cout<<" *"<<endl; cout<<" *"<<endl; } 如何用上for循环画
要使用for循环来绘制这个图案,可以使用嵌套的for循环和条件语句来实现。下面是一个使用for循环来绘制该图案的示例代码:
```cpp
#include <iostream>
using namespace std;
int main() {
int rows = 15; // 总行数
int mid = (rows + 1) / 2; // 中间行
for (int i = 1; i <= rows; i++) {
// 打印空格
for (int j = 1; j <= abs(mid - i); j++) {
cout << " ";
}
// 打印星号
for (int k = 1; k <= 2 * (rows - abs(mid - i)) - 1; k++) {
cout << "*";
}
cout << endl;
}
return 0;
}
```
运行程序后,将会输出相应的图案。这个图案共有15行,可以根据需要进行调整。注意,使用for循环来绘制该图案时,需要利用绝对值函数 `abs()` 来计算空格的数量。
阅读全文