Беда с файлами в С++

Завтра сдавать последнюю работу практики и есть проблема. Билась с эти неделю, но так и не поняла,что не так. Код:

#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
#include <vcl.h>

struct task {
    string  prizv, group,  mark;
};
task x[100];
FILE *f, *F1;
void create(void) {
if ((f=fopen("xx.dat", "w"))==NULL)
{perror("Файл уже создан");
getch();
exit(1);}
    const int n=10;
        for (int i = 0; i <n;i++) {
        cout << "Фамилия ученика" << endl;
        cin >> x[i].prizv;
        cout << "Группа ученика" << endl;
        cin >> x[i].group;
        cout << "Оценки" << endl;
        cin >> x[i].mark;

    }
    for (int i = 0; i < n; i++) {
        cout << x[i].prizv << " " << x[i].group << " " << x[i].mark << " " << endl;
    }
    fwrite(&x,sizeof(x),1,f);
    fclose(f);

}

void watch(void) {
 if ((f=fopen("xx.dat", "r"))==NULL)
{perror("Нет файла");
getch();
exit(1);}
int n =  0;
    while(fread(&x,sizeof(x),1,f)!=NULL) {
        cin >> x[n].prizv;
        cin >> x[n].group;
        cin >> x[n].mark;

        n++;
    }
    for (int i = 0; i < n-1; i++) {
        cout << "Фамилия ученика: " << endl;
        cin >> x[i].prizv;
        cout << "Группа ученика: " << endl;
        cin >> x[i].group;
        cout << "Оценки: " << endl;
        cin >> x[i].mark;
        cout << "\n";
        getch();
    }
    fclose(f);

}

void add(void) {
    if ((f=fopen("xx.dat", "a"))==NULL)
{perror("Файл уже есть");
getch();
exit(1);}
    int n;
    n = 0;
    while (fread(&x,sizeof(x),1,f)!=NULL) {
         cin >> x[n].prizv;
       cin>> x[n].group;
        cin >> x[n].mark;

        n++;

   n--;
    for (int i = 0; i < n; i++){cout << "Фамилия: " << endl;
        cin >> x[i].prizv;
        cout << "Группа: " << endl;
        cin >> x[i].group;
        cout << "Оценки: " << endl;
        cin >> x[i].mark;
    n++; }
   fwrite(&x,sizeof(x),1,f);

    for (int i = 0; i < n; i++) {
        cout << x[i].prizv << " " << x[i].group << " " << x[i].mark << " " << endl;
    }

    fclose(f);

}


int find()
 {if ((f=fopen("xx.dat", "r"))==NULL)
{perror("Нет файла");
getch();
exit(1);}
    int n
    n = 0;
    while (fread(&x,sizeof(x),1,f)!=NULL) {
        cin >> x[n].prizv;
        cin >> x[n].group;
        cin >> x[n].mark;

        n++;
    }
    fclose(f);
    for (int i = 0; i < n-1; i++) {
        if (n[i].mark == "2") {
            cout << i + 1 << "Фамилия: " << endl;
            cout << x[i].prizv << endl;
            cout << "Группа: " << endl;
            cout << x[i].group << endl;
            cout << "Оценки: " << endl;
            cout << x[i].mark << endl;
           cout << "\n";
        }
    }
   fclose(f);
   return 0;
}

int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    string name;
    int r;
    cout << "Введите имя файла" << endl;
    getline(cin,name);
    rej = 0;
    while (r!= 6) {
        cout << "1.Создание файла" << endl;
        cout << "2.Просмотр содержимого файла" << endl;
        cout << "3.Добавление данных" << endl;
        cout << "4.Удаление с файла" << endl;
        cout << "5.Фамилия студента у которого  "2" " << endl;
        cout << "6.Выход" << endl;
        cin >> r;
        switch (r) {
        case 1: create(name);
            break;
        case 2: watch(name);
            break;
        case 3: add(name);
            break;
        /*case 4: del(name);
            break; */
        case 5: find(name);
            break;
        }
    }
    return 0;
}

Ошибки: введите сюда описание изображения

Просьба помочь, как можно скорее.


Ответы (1 шт):

Автор решения: mazik7512

Ну с чего бы начать.

Во-первых, как вам правильно указали в комментариях:

в функции add цикл while не закрыли после n++;. идёт ошибка нет скобки. в функции find нет точки с запятой при декларации переменной int n

Во-вторых, вы объявляете функции create(void), watch(void), add(void) и find(void) без параметров, а вызываете их в main с параметром name. Вам нужно определиться и либо вызывать их в main без параметров, либо объявлять их с параметром, например add(string str).

В-третьих, вам нужно экранировать кавычки внутри строки, если вы хотите их выводить: cout << "5.Фамилия студента у которого \"2\" " << endl;


UPD. В комментариях указали ошибку в функции find(), в условии нужно использовать не n[i], а x[i].

→ Ссылка