C++ 尝试执行cin>&燃气轮机;字符串[array]并且存在错误(“字符串下标超出范围”)
守则:C++ 尝试执行cin>&燃气轮机;字符串[array]并且存在错误(“字符串下标超出范围”),c++,C++,守则: class DataBase { private: int age, stuNumNew; string stuName, command; string ver = "Alpha"; float stuNum = 1; public: void Start() { cout << "Welcome back to Sudent DataBase <ver " << ver << ">
class DataBase {
private:
int age, stuNumNew;
string stuName, command;
string ver = "Alpha";
float stuNum = 1;
public:
void Start() {
cout << "Welcome back to Sudent DataBase <ver " << ver << ">." << endl;
cout << "Type 'Add' for add a student.";
cin >> command;
if (command == "Add") {
Add();
}
else if (command == "Search") {
cout << "Student number: ";
cin >> stuNumNew; //Get input from user
cout << "Name: " << stuName[stuNumNew] << endl << "Age: " << age[&stuNumNew] << endl;
Start();
}
}
void Add() {
cout << "Name: ";
**cin >> stuName[stuNum] * *; //get the name
cout << "Age: ";
cin >> age[stuNum]; //get the age
cout << "Student Number: " << stuNum;
stuNum = stuNum++;
stuNumNew = stuNum;
Start();
}
};
类数据库{
私人:
国际时代,全新;
字符串stuName,命令;
字符串ver=“Alpha”;
浮点数=1;
公众:
void Start(){
无法创建可变大小的数组
您遇到的问题是由使用固定大小的变量引起的。在这种情况下,您需要的是向量
,因为您试图做的是为大小可变的数组分配名称和数字,以便您可以在程序中添加新学生
向量允许你这样做
这是修改后的代码:
#包括
#包括
#包括
使用名称空间std;
类数据库{
私人:
输入;
/*声明int类型的向量以包含学生的年龄*/
矢量研究;
/*声明std::string类型的向量以包含学生的姓名*/
矢量学生名;
字符串命令;
字符串ver=“Alpha”;
/*stuNum被删除,因为向量跟踪它们自己的大小*/
公众:
void Start(){
你能想象一下吗cin>>stuName[stuNum]
的作用吗?因为,目前,你正在尝试读取char
,并将其写入stuNum
的th位置(错误意味着stuName
中的stuNum
第th个字符不存在)?您想创建一个std::string
数组并读入其中的元素吗?似乎您假设所有类型都可以被视为容器。例如,age[stuNum];
是没有意义的。使用'float'作为索引很奇怪,您应该使用整数类型。Start()
和Add()
仅受用户输入的限制,以递归方式相互调用。如果用户选择不断添加新学员,这将不可避免地崩溃。