需要使用类对象数组为学校做项目。我们不能使用向量,所以任何提示它们的答案都无济于事。我一直在尝试创建这样的数组,然后在每个对象中添加一个名称。我已经尝试运行for循环来执行此操作,并且它一直跳过数组中的第一个对象。帮助
#include <iostream>
#include <cstring>
using namespace std;
class Car
{
private:
char* driver;
public:
void setDriver(char* name)
{
driver = name;
}
void getDriver()
{
cout<<driver;
}
};
int main()
{
int numDrivers;
cout<<"How many drivers would you like?";
cin>>numDrivers;
Car* roster = new Car[numDrivers];
for(int i=0;i<numDrivers;i++)
{
char* name;
name = new char[20];
cout<<"name:";
cin.getline(name, 20);
roster[i].setDriver(name);
}
for(int i=0;i<numDrivers;i++)
{
roster[i].getDriver();
cout<<".\n";
}
return 0;
}
我玩过我的for循环的范围,它仍然总是做同样的事情 当它命中循环来设置驱动程序的名称时。看起来像这样
How many drivers would you like?: 4
name:name: name1
name: name2
name: name3
.
name1.
name2.
name3.
非常感谢任何帮助。
答案 0 :(得分:2)
根据评论,cin and getline skipping input
回答了同样的问题这会影响您的代码的确切方式如下。 执行这些行以从输入中读取数字4(例如):
cout<<"How many drivers would you like?";
cin>>numDrivers;
>>
运算符从cin
读取足够多的字符以确定其中有数字4(并且数字以4结尾)。它不读得更远,所以你可能在该行上输入的任何其他内容仍然存在。
如果你点击&#34;返回&#34;紧接着&#34; 4&#34;然后唯一剩下的就是结束该行的换行符,但无论如何它仍然存在。
当i
为0
时,与用户的下一次互动是在输入循环期间。
此代码执行:
cout<<"name:";
cin.getline(name, 20);
所以程序打印&#34; name&#34;到控制台并等待,直到有换行字符终止输入。但是已经存在等待阅读的输入(从cin>>numDrivers
遗留下来)。
因此,程序在回车之前没有任何内容。
它将此处理为空字符串并继续进行第二次迭代
循环。
答案 1 :(得分:2)
问题似乎是你有一个晃来晃去的&#39; \ n行中的换行符
cin>>numDrivers;
上面的代码不会消耗该新行字符。所以当代码到达
时cin.getline(name, 20);
它将新行字符作为一行使用并移动一行
修复是在第一次调用cin后忽略所有字符,如下所示
void ignore_line ( std::istream& in )
{
in.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );
}
int main()
{
int numDrivers;
cout<<"How many drivers would you like?";
cin>>numDrivers;
ignore_line(cin); // Consume newline
Car* roster = new Car[numDrivers];
for(int i=0;i<numDrivers;i++)
{
char* name;
name = new char[20];
cout<<"name:";
cin.getline(name, 20);
roster[i].setDriver(name);
}
for(int i=0;i<numDrivers;i++)
{
roster[i].getDriver();
cout<<".\n";
}
return 0;
}