Выдает ошибку - C (СИ) (147993)
Формулировка задачи:
Всем привет .Помогите разобраться. Почему выдает ошибку на строке 17
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <iostream>
struct TZap {
char FIO[30];
double s_b, mat, xum, inf, fiz, gr, god;
} Zap;
int size = sizeof(TZap);
FILE *Fz, *Ft;
char File_Zap[] = "zapisi.dat";
char File_Rez[] = "rezult.txt";
void Out(TZap);
void main()
{ ' здесь ошибка
int kod, D_f, i = 0, j, kol;
double s_b, mat, xum, inf, fiz, gr, god;
long len;
TZap st, *mas_Z;
Ft = fopen(File_Rez, "w");
while (true) {
puts("\n Create - 1\n Add - 2\n View - 3\n Sort - 4\n EXIT - 0");
scanf("%d", &kod);
switch (kod) {
case 1:
if ((Fz = fopen(File_Zap, "wb")) == NULL)
{
puts("\n Create ERROR!");
return;
}
fclose(Fz);
printf("\n Create New File %s !\n", File_Zap);
break;
case 2:
Fz = fopen(File_Zap, "ab");
printf("\n F.I.O. - ");
fflush(stdin);
gets(Zap.FIO);
printf(" God rozdeniya - ");
fflush(stdin);
scanf("%lf", &Zap.god);
printf(" Nomer gruppi - ");
scanf("%lf", &Zap.gr);
printf(" Fizika - ");
scanf("%lf", &Zap.fiz);
printf(" Matematika - ");
scanf("%lf", &Zap.mat);
printf(" Informatika - ");
scanf("%lf", &Zap.inf);
printf(" Xumuya - ");
scanf("%lf", &Zap.xum);
Zap.s_b = (Zap.fiz + Zap.mat + Zap.inf + Zap.xum) / 4;
fwrite(&Zap, size, 1, Fz);
fclose(Fz);
break;
case 3:
if ((Fz = fopen(File_Zap, "rb")) == NULL)
{
puts("\n Open ERROR!");
return;
}
//
printf("\n\t —-----------------— Informations —-------------------\n");
printf("\n\t FIO , god ,nomer gr, fiz , mat , inf , xum ,sredball\n");
//
fprintf(Ft, "\n\t —-----------------— Informations —-------------------");
while (1)
{
if (!fread(&Zap, size, 1, Fz)) break;
Out(Zap);
}
fclose(Fz);
break;
case 4:
Fz = fopen(File_Zap, "rb");
D_f = fileno(Fz);
len = filelength(D_f);
kol = len / size;
mas_Z = new TZap[kol];
//
for (i = 0; i < kol; i++)
fread((mas_Z + i), size, 1, Fz);
fclose(Fz);
printf("\n\t---— S O R T —---\n");
fprintf(Ft, "\n\t---— S O R T —---\n");
for (i = 0; i < kol - 1; i++)
if ((mas_Z[i].FIO[0] == 'A') && ((mas_Z[i].mat == 8) || (mas_Z[i].mat == 9)))
{
}
for (i = 0; i < kol; i++)
Out(mas_Z[i]);
delete[]mas_Z;
break;
case 0:
fclose(Ft);
return;
}
}
}
void Out(TZap z)
{
printf("\n %20s , %6.0lf , %6.0lf , %6.3lf , %6.3lf , %6.3lf , %6.3lf , %6.3lf",
z.FIO, z.god, z.gr, z.fiz, z.mat, z.inf, z.xum, z.s_b);
fprintf(Ft, "\n %20s , %6.0lf , %6.0lf , %6.3lf , %6.3lf , %6.3lf , %6.3lf , %6.3lf",
z.FIO, z.god, z.gr, z.fiz, z.mat, z.inf, z.xum, z.s_b);
}Решение задачи: «Выдает ошибку»
textual
Листинг программы
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <iostream>
struct TZap {
char FIO[30];
double s_b, mat, xum, inf, fiz, gr, god;
} Zap;
int size = sizeof(TZap);
FILE *Fz, *Ft;
char File_Zap[] = "zapisi.dat";
char File_Rez[] = "rezult.txt";
void Out(TZap);
int main()
{
int kod, D_f, i = 0, kol;
long len;
TZap *mas_Z;
Ft = fopen(File_Rez, "w");
while (true) {
puts("\n Create - 1\n Add - 2\n View - 3\n Sort - 4\n EXIT - 0");
scanf("%d", &kod);
switch (kod) {
case 1:
if ((Fz = fopen(File_Zap, "wb")) == NULL)
{
puts("\n Create ERROR!");
return 0;
}
fclose(Fz);
printf("\n Create New File %s !\n", File_Zap);
break;
case 2:
Fz = fopen(File_Zap, "ab");
printf("\n F.I.O. - ");
fflush(stdin);
gets(Zap.FIO);
printf(" God rozdeniya - ");
fflush(stdin);
scanf("%lf", &Zap.god);
printf(" Nomer gruppi - ");
scanf("%lf", &Zap.gr);
printf(" Fizika - ");
scanf("%lf", &Zap.fiz);
printf(" Matematika - ");
scanf("%lf", &Zap.mat);
printf(" Informatika - ");
scanf("%lf", &Zap.inf);
printf(" Xumuya - ");
scanf("%lf", &Zap.xum);
Zap.s_b = (Zap.fiz + Zap.mat + Zap.inf + Zap.xum) / 4;
fwrite(&Zap, size, 1, Fz);
fclose(Fz);
break;
case 3:
if ((Fz = fopen(File_Zap, "rb")) == NULL)
{
puts("\n Open ERROR!");
return 0;
}
//
printf("\n\t —-----------------— Informations —-------------------\n");
printf("\n\t FIO , god ,nomer gr, fiz , mat , inf , xum ,sredball\n");
//
fprintf(Ft, "\n\t —-----------------— Informations —-------------------");
while (1)
{
if (!fread(&Zap, size, 1, Fz)) break;
Out(Zap);
}
fclose(Fz);
break;
case 4:
Fz = fopen(File_Zap, "rb");
D_f = fileno(Fz);
len = filelength(D_f);
kol = len / size;
mas_Z = new TZap[kol];
//
for (i = 0; i < kol; i++)
fread((mas_Z + i), size, 1, Fz);
fclose(Fz);
printf("\n\t---— S O R T —---\n");
fprintf(Ft, "\n\t---— S O R T —---\n");
for (i = 0; i < kol - 1; i++)
if ((mas_Z[i].FIO[0] == 'A') && ((mas_Z[i].mat == 8) || (mas_Z[i].mat == 9)))
{
}
for (i = 0; i < kol; i++)
Out(mas_Z[i]);
delete[]mas_Z;
break;
case 0:
fclose(Ft);
return 0;
}
}
}
void Out(TZap z)
{
printf("\n %20s , %6.0lf , %6.0lf , %6.3lf , %6.3lf , %6.3lf , %6.3lf , %6.3lf",
z.FIO, z.god, z.gr, z.fiz, z.mat, z.inf, z.xum, z.s_b);
fprintf(Ft, "\n %20s , %6.0lf , %6.0lf , %6.3lf , %6.3lf , %6.3lf , %6.3lf , %6.3lf",
z.FIO, z.god, z.gr, z.fiz, z.mat, z.inf, z.xum, z.s_b);
}
Объяснение кода листинга программы
- Структура данных TZap содержит поля: FIO (30 символов), s_b, mat, xum, inf, fiz, gr, god (все числовые).
- Переменная Zap является экземпляром структуры TZap.
- Переменная size содержит размер структуры TZap в байтах.
- Переменная Ft инициализируется как указатель на файл, в который будут записываться результаты.
- Переменная File_Zap содержит имя файла, в котором хранятся данные.
- Переменная File_Rez содержит имя файла, в который будут записываться результаты.
- Функция Out() выводит данные из структуры TZap в формате: ФИО, god, gr, fiz, mat, inf, xum, s_b.
- В цикле while (true) предлагается выбрать действие: создание нового файла (1), добавление записи в файл (2), просмотр записей в файле (3), сортировка записей в файле (4), выход из программы (0).
- Если выбрано действие 2, то происходит запись данных в файл. Для этого используется функция scanf() для считывания данных в поля структуры Zap.
- Если выбрано действие 3, то происходит чтение данных из файла и их вывод на экран с помощью функции Out().
- Если выбрано действие 4, то происходит сортировка записей в файле по определенному условию.
- Для работы с динамическим массивом используется оператор new для выделения памяти под массив структур TZap.
- В цикле for происходит чтение данных из файла в массив структур TZap.
- После выполнения всех действий, файл закрывается с помощью функции fclose().