Помогите с файлами

Описать структуру с именем ZNAK, содержащую следующие поля:
— фамилия, имя;
— знак Зодиака;
— день рождения (массив из трех чисел).

Написать программу, выполняющую следующие действия:
— ввод с клавиатуры данных в файл;
вывод на экран информации о людях, родившихся под знаком, наименование которого введено с клавиатуры; если таких нет, выдать на дисплей соответствующее сообщение

Не уверен в правильности, но думаю как-то так...

    #include <iostream>
    #include <fstream>
    using namespace std;

    const int n = 150;

    struct ZNAK
    {
        char name[n], last_name[n], zodiak[n];
        int data[3];
    };


    int main()
    {
        setlocale(0,"");

        ZNAK *znak = new ZNAK;

        ofstream fout("znak.txt", ios::app);
        cout << "Введите имя: ";
        cin.getline(znak->name, n);

        cout << "Введите фамилию: ";
        cin.getline(znak->last_name, n);

        cout << "Введите свой знак зодиака: ";
        cin.getline(znak->zodiak, n);

        cout << "Введите день рождения: ";
        cin >> znak->data[0];

        cout << "Введите  месяц рождения: ";
        cin >> znak->data[1];

        cout << "Введите год рождения: ";
        cin >> znak->data[2];

        fout << znak->name << " " << znak->last_name << " " << znak->zodiak << " "
   << znak->data[0] << "." << znak->data[1] << "." 
             << znak->data[2] << " ";
        fout << endl;
        fout.close();

        ifstream fin("znak.txt");
        char line[n];
        while(true)
        {
            if(!fin.eof())
            {

                while(fin.getline(line,n))
                {
                    if(strstr(line, znak->zodiak))
                        cout << line << endl;
                }
            } else {
                break;

            }
        }

        delete znak;
        return 0;
    }

На первый взгляд вроде как правильно. Только размер массива line надо сделать в 3 с лишним раза длиннее: теоретически там должно быть место n * 3 под строки, плюс дата, плюс пробелы.

И при чтении из файла твоя прога выведет строку
Олег Одевахин стрелец 01.01.2000
при запросе знака дева.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.