C++ c++;对象数组,初始化失败
需要使用类对象数组为学校做一个项目。我们不能使用向量,所以任何暗示它们的答案都不会有帮助。我一直在尝试创建这样的and数组,然后在每个对象中输入一个名称。我尝试运行for循环来实现这一点,但它一直跳过数组中的第一个对象。帮忙C++ c++;对象数组,初始化失败,c++,arrays,class,object,constructor,C++,Arrays,Class,Object,Constructor,需要使用类对象数组为学校做一个项目。我们不能使用向量,所以任何暗示它们的答案都不会有帮助。我一直在尝试创建这样的and数组,然后在每个对象中输入一个名称。我尝试运行for循环来实现这一点,但它一直跳过数组中的第一个对象。帮忙 #include <iostream> #include <cstring> using namespace std; class Car { private: char* driver; public: void setDr
#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;
}
非常感谢您的帮助。根据评论,同样的问题在 这影响代码的确切方式如下所示。 执行这些行以从输入中读取数字4(例如):
cout<<"How many drivers would you like?";
cin>>numDrivers;
因此,程序将“name”打印到控制台并等待,直到有一些输入被换行符终止。但是已经有类似的输入等待读取(从cin>>numDrivers
中遗留下来)。
因此,程序读取回车符时,前面没有任何内容。
它将其作为一个空字符串进行处理,并继续进行第二次迭代
根据评论,同样的问题在 这影响代码的确切方式如下所示。 执行这些行以从输入中读取数字4(例如):
cout<<"How many drivers would you like?";
cin>>numDrivers;
因此,程序将“name”打印到控制台并等待,直到有一些输入被换行符终止。但是已经有类似的输入等待读取(从cin>>numDrivers
中遗留下来)。
因此,程序读取回车符时,前面没有任何内容。
它将其作为一个空字符串进行处理,并继续进行第二次迭代
循环的一部分。问题似乎在于行中有一个“悬空”\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;
}
void ignore_行(std::istream&in)
{
in.ignore(std::numeric_limits::max(),'\n');
}
int main()
{
国际努姆德里弗斯;
coutnumDrivers;
忽略换行符(cin);//使用换行符
车*花名册=新车[numDrivers];
对于(int i=0;i而言,问题似乎在于行中有一个“悬空”\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;
}
void ignore_行(std::istream&in)
{
in.ignore(std::numeric_limits::max(),'\n');
}
int main()
{
国际努姆德里弗斯;
coutnumDrivers;
忽略换行符(cin);//使用换行符
车*花名册=新车[numDrivers];
对于(int i=0;我能解释一下为什么不能使用向量吗?像iostream和string library这样的东西在内部使用了很多标准库功能,所以禁止这样做似乎完全是武断的。告诉你的学校现在是2015年。为什么不使用编译器提供的资源来避免内存泄漏和bug呢?正如@user657267所说,这不是你的for i循环这意味着cin>>numDrivers
在输入中留下了行尾,然后由您的第一次getLine
调用读取。我讨厌像“使用向量,它是2015”这样的评论在正确使用裸新/删除的过程中,有一个有效的观点,不实践,这是很难学习的。事实上,代码发布有许多缺陷是另一回事…@ VSOFTCO:没有必要学习STL在2015。一个人应该学习的C++标准库,在1998被引入,并已多次更新。你能解释一下为什么不能使用向量吗?像iostream和string library这样的东西在内部使用了很多标准库功能,所以禁止这样做似乎完全是武断的。告诉你的学校现在是2015年。为什么不使用编译器提供的资源来避免内存泄漏和bug呢?正如@user657267所说,这不是你的for循环,而是cin>>numDrivers
在输入中留下行尾,然后由您的第一次getLine
调用读取。我讨厌像“使用向量,它的2015”这样的评论学习正确使用裸NeX/Delphi是有效的,不需要实践,这是很难学习的。事实上,张贴的代码有很多缺陷。…VSOFTCO:没有必要学习STL。2015,学习C++标准库,它在1998被引入,并且已经更新了几次。It’他能纠正这个,绝对是正确的答案。我的英雄!他能纠正这个,绝对是正确的答案。我的英雄!!