Проблема с выводом элементов массива
Логика программы :
Мы создаем вектор зачеток длины lenght, потом записываем все данные зачеток с помощью метода setvalue который присваивает введенные данные полям элемента массива, но после всего этого при выводе элементов выводятся только какие-то двоеточия и ничего больше.
Код:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
class Studentrecordbook
{
protected:
string firstname;
string secondname;
string middlename;
public:
void setValues
(
string secondname ,
string firstname,
string middlename
)
{
this->secondname = secondname;
this->firstname = firstname;
this->middlename = middlename;
}
void WriteText()
{
cout << this->secondname << " " << this->firstname << " " << this->middlename << ":\n\n";
}
auto Change
(
string change_secondname,
string change_firstname,
string change_middlename
)
{
this->secondname = change_secondname;
this->firstname = change_firstname;
this->middlename = change_middlename;
}
};
class Group : public Studentrecordbook
{
private:
vector<Studentrecordbook> students;
public:
void ShowStudents()
{
for (int i = 0; i < students.size(); i++)
students[i].WriteText();
}
void Addstudents(int lenght)
{
for (int i = 0; i < lenght; i++)
{
Studentrecordbook somestudent;
somestudent.setValues(secondname, firstname, middlename);
students.push_back(somestudent);
}
}
void Searchstudents(string searchsecondname , string searchfirstname , string searchmiddlename)
{
for (int i = 0; i < students.size(); i++)
{
if ((searchsecondname == secondname) && (searchfirstname == firstname) && (searchmiddlename == middlename))
{
students[i].WriteText();
break;
}
else
cout << "Идет поиск" << endl;
}
}
};
int main()
{
setlocale(LC_ALL, "Rus");
int lenght = 1;
string secondname;
string firstname;
string middlename;
Group student;
cout << "Сколько зачеток хотите создать?" << endl;
cin >> lenght;
for (int i = 0; i < lenght; i++)
{
cout << "Введите Фамилию" << endl;
cin >> secondname;
cout << "Введите Имя" << endl;
cin >> firstname;
cout << "Введите Отчество" << endl;
cin >> middlename;
student.Addstudents(lenght);
}
student.ShowStudents();
return 0;
}
Ответы (1 шт):
Ваши переменные firstname, secondname и т.д в функции int mane() создаются в ней, и в ней же и пропадают. Эти переменные не переходят между функциями, т.к они локальные. Их нужно объявить глобальными на уровне namespace, либо просто передать их в функцию. А еще у вас не правильно реализовано добавление студентов. Вам не надо добавлять их в цикле, и в функции сново делать цикл, а просто в цикле вызывать функцию:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
class Studentrecordbook
{
protected:
string firstname;
string secondname;
string middlename;
public:
void setValues
(
string secondname,
string firstname,
string middlename
)
{
this->secondname = secondname;
this->firstname = firstname;
this->middlename = middlename;
}
void WriteText()
{
cout << this->secondname << " " << this->firstname << " " << this->middlename << ":\n\n";
}
auto Change
(
string change_secondname,
string change_firstname,
string change_middlename
)
{
this->secondname = change_secondname;
this->firstname = change_firstname;
this->middlename = change_middlename;
}
};
class Group : public Studentrecordbook
{
private:
vector<Studentrecordbook> students;
public:
void ShowStudents()
{
for (int i = 0; i < students.size(); i++)
students[i].WriteText();
}
void Addstudents( string firstname , string secondname, string middlename)
{
Studentrecordbook somestudent;
somestudent.setValues(secondname, firstname, middlename);
students.push_back(somestudent);
}
void Searchstudents(string searchsecondname, string searchfirstname, string searchmiddlename)
{
for (int i = 0; i < students.size(); i++)
{
if ((searchsecondname == secondname) && (searchfirstname == firstname) && (searchmiddlename == middlename))
{
students[i].WriteText();
break;
}
else
cout << "Идет поиск" << endl;
}
}
};
int main()
{
setlocale(LC_ALL, "Rus");
int lenght = 1;
string secondname;
string firstname;
string middlename;
Group student;
cout << "Сколько зачеток хотите создать?" << endl;
cin >> lenght;
for (int i = 0; i < lenght; i++)
{
cout << "Введите Фамилию" << endl;
cin >> secondname;
cout << "Введите Имя" << endl;
cin >> firstname;
cout << "Введите Отчество" << endl;
cin >> middlename;
student.Addstudents(firstname, secondname, middlename);
}
student.ShowStudents();
//system("pause");
return 0;
}