Линейные списки с++
Вячеслав Макаров

Изучая списки с++ , наткнулся на задачу:
созать линейный список на основе массива, в котором будет создание анкеты с информацией в ней : Имя, Фамилия, Отчество и номер телефона
вот код:

#include<iostream>          //Поключаем библиотеку iostream
using namespace std;        //Чтобы не писать std:: перед каждим cin или cout
#include<fstream>           //Поключаем библиотеку fstream
class Name                  //Клаас Name
{
private:                    //Закрытые поля класся
    char n[50],f[50],o[50]; //Имя, Фамилия, Отчество
    unsigned long num;      //Номер телефона
    static fstream file;    //Статический Указатель на Файл
public:                     //Открытые методы класса
    Name();                 //Конструктор по умолчанию
    void Open();            //Создаеть файл
    void Save();            //Сохранить поля класса в файл
    void Load();            //Загружает данные из файла в поля класса и выводит их на екран, делате так пока не дойдет до конца файла
    void Cout();            //Вывод на екран полей класса
    void Cin();             //Ввод даныхв поля класса
    void Menu();            //Меню выбора
};
//-----------------------------------------------------------------------------------
fstream Name::file;
//-----------------------------------------------------------------------------------
Name::Name()                //Конструктор по умолчанию
{
    Open();                 //Запустить метод Oen(); который Создаеть файл
}
//-----------------------------------------------------------------------------------
void Name::Open()           //Создаеть файл
{
    file.open("D:\\Data.txt",ios::in|ios::out|ios::binary|ios::app);
    //Создать файл Data.txt на диске D:\ с возможностью записи, чтени, в бинарном режиме, записывать даные в конец файла
}
//-----------------------------------------------------------------------------------
void Name::Save()           //Сохранить поля класса в файл
{
    file.seekp(0,ios::end);     //Перевести указатель файла в конец файла
    file<<n<<' '<<f<<' '<<o<<' '<<num<<' '; //сохрание данных в файл
}
//-----------------------------------------------------------------------------------
void Name::Load()           //Загружает данные из файла в поля класса и выводит их на екран, делате так пока не дойдет до конца файла
{
    file.seekp(0,ios::beg);     //Перевести указатель файла на начало файла     
    while(!file.eof())          //До тех пор пока не дойдет до конца файла
    {
        file>>n>>f>>o>>num;     //Читать даные из файла и записывать их в поля
        if(file.eof())          //Если конец файла выйти из цикла не вводить конец файла на екран
            break;          
        Cout();                 //Вывести на екран поля класса
    }
}
//-----------------------------------------------------------------------------------
void Name::Cout()           //Вывод на екран полей класса
{
    cout<<"Имя: "<<n<<endl                      //Выводит текст Имя: и поле класса n
        <<"Фамилия: "<<f<<endl                  //Выводит текст Фамилия: и поле класса f
        <<"Отчество: "<<o<<endl                 //Выводит текст Отчество: и поле класса o
        <<"Номер телефона: "<<num<<endl<<endl;  //Выводит текст Номер телефона: и поле класса num
}
//-----------------------------------------------------------------------------------
void Name::Cin()            //Ввод даныхв поля класса
{
    cout<<"Введите Имя: ";      //Выводит текст Введите Имя:
    cin>>n;                     //Ввод имени в поле n
    cout<<"Введите Фамилию: ";  //Выводит текст Введите Фамилия:
    cin>>f;                     //Ввод фамили в поле f
    cout<<"Введите Отчество: "; //Выводит текст Введите Отчество:
    cin>>o;                     //Ввод отчества в поле o
    cout<<"Введите Номер телефона: ";//Выводит текст Введите Номер телефона:
    cin>>num;                   //Ввод телефона в поле num
}
//-----------------------------------------------------------------------------------
void Name::Menu()           //Меню выбора
{
    char ch;                //Перемменная через которую пользователь производит ввод
    do                      //Запуск цикла
    {
        cout<<endl;
        cout<<"1. Ввод новой анкеты"<<endl                  //Ну тут думаю итка все понятно
            <<"2. Вывести анкету на екран"<<endl            //
            <<"3. Запись анкеты в файл"<<endl               //
            <<"4. Вывести содержимое файла на экран"<<endl  //
            <<"5. Выход"<<endl<<endl;
        cin>>ch;            //Ввод пользователя
        cout<<endl;
        switch(ch)          //Анализ ввода пользователя
        {
            case'1':Cin();break;    
            case'2':Cout();break;
            case'3':Save();break;
            case'4':Load();break;
            case'5':break;
            default:cout<<"Не правильный ввод даных повторите попытку"<<endl;system("PAUSE");
        }
    }
    while(ch!='5');//Условие цикла Пока пользователь не введет 5
}
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
int main()
{
    setlocale(LC_ALL,"Rus");
    Name n;
    n.Menu();
    return 0;
}

Я изменил лишь в " " и дописал строку
это
```
void Name::Cin() //Ввод данных в поля класса
{
cout<<"Введите Имя: "; //Выводит текст Введите Имя:
cin>>n; //Ввод имени в поле n
cout<<"Введите Фамилию: "; //Выводит текст Введите Фамилия:
cin>>f; //Ввод фамили в поле f
cout<<"Введите Отчество: "; //Выводит текст Введите Отчество:
cin>>o; //Ввод отчества в поле o
cout<<"Введите Номер телефона: ";//Выводит текст Введите Номер телефона:
cin>>num; //Ввод телефона в поле num
}

на это 

void Name::Cin() //Ввод даных в поля класса
{

              //Ввод имени в поле n
cout << "№  места: ";  //Выводит текст Какое место:
cin >> n;                   // ввод в поле n
cout << "Введите Фамилия: "; //Выводит текст Введите Фамилия:
cin >> o;                     //Ввод отчества в поле o
cout << "Введите Номер телефона: ";//Выводит текст Введите Номер телефона:
cin >> num;                   //Ввод телефона в поле num
cout << " № билета : " << f << endl;// Вывод текст Ваш № билети поле f

}
```
Файл создается, ошибка явно в Load(), тк при выбора 4, а это функция Load() циклится

Еще я сейчас понял, счётчик должен устанавливаться в начал файла, а он не устанавливается ни при
```

file.seekp(0, ios::beg);
//Или
file.seekp(0);

или

1
file.clear();

``` срин :
[https://pp.vk.me/c636731/v636731398/36c36/1dzhvAEuT-A.jpg](http://)

Вячеслав Макаров около 1 месяца назадСпасибо 0
1 чел.