Здравствуйте. Помогите найти ошибку. Задание в комментарии.
Код:
#include "stdafx.h"
#include "stdlib.h"
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <conio.h>
#include <windows.h>
#include<stdio.h>//здесь есть File
using namespace std;
void main() {
/*Реализовать информационную базу, состоящую из трех файлов:
FIO.DAT - содержит в виде символьных строк, оканчивающихся <\n>, список фамилий спортсменов;
SPORT.DAT - содержит в виде символьных строк наименования видов спорта, которые не повторяются;
LINK.IDX - содержит записи вида struct {unsigned long name_idx; //индекс записи в файле FIO.DAT;
unsigned long sport_idx; //индекс записи в файле SPORT.DAT}, связывающие между собой фамилию и вид спорта.
В качестве индексов используются значения позиций, с которых начинаются записи в соответствующих файлах.
Записи в FIO.DAT и в LINK.IDX взаимнооднозначно соответствуют друг другу.
Программа должна обеспечивать выполнение следующих функций:
1) включение новой фамилии спортсмена с указанием вида спорта,
2) добавление нового вида спорта,
3) по заданной фамилии спортсмена вывод на экран вида спорта, которым тот занимается,
если заданная фамилия соответствует нескольким видам спорта, то они все выводятся на экран. */
struct index{
long name_idx; //индекс записи в файле FIO.DAT;
long sport_idx;//индекс записи в файле SPORT.DAT},
}S,mas[40],S1;
FILE *f;
FILE *f1;
FILE *sf;
char k;
int n=0;
do
{puts("\n1)Добавить фамилию спортсмена \n2)Добавить вид спорта \n3)Выдать информацию о спортсмене по фамилии \n0)Выход\n");
puts("Выберете пункт ");
cin>>k;
int id=0,id1=0;
char fio[40];char s[40];
switch(k)
{
case '1':
if((f1=fopen("SPORT.dat","r"))!=NULL)
{
f=fopen("FIO.dat","a+");
sf=fopen("LINK.idx","ab+");
puts("Введите фамилию спортсмена :");
scanf("%s",fio);
strcat(fio,"\n");
fwrite(fio,strlen(fio),1,f);
//fclose(f);
//f=fopen("LINK.idx","ab+");
//S.name_idx++;
n++;
printf("Количество введенных спортсменов = %d \n",n);//проверка
puts("Выберете вид спорта :");
char r[100];
while(!feof(f1))
{
if(fgets(r,100,f1))
printf(r);
}
int n1;
scanf("%d",&n1);
printf("Вы выбрали вид спорта с индексом %d\n",n1);
mas[id1].name_idx=ftell(f);
mas[id1].sport_idx=mas[n1-1].sport_idx;
printf("Это значение индекса спорта %d",mas[id1].sport_idx);
//S.name_idx++;
//S.sport_idx=n1;
//printf("%d",s);
//fseek(sf,mas[id1].sport_idx,SEEK_SET);
fwrite(&mas[id1],sizeof(index),1,sf);
fclose(f);fclose(sf);fclose(f1);id1++;
}break;
case '2':
char sport[40];
f=fopen("SPORT.dat","a+");
puts("Введите название вида спорта :");
scanf("%s",sport);
strcat(sport,"\n");
mas[id].sport_idx=ftell(f);
fwrite(sport,strlen(sport),1,f);
//f1=fopen("LINK.idx","ab+");
//fseek(f1,-strlen(s)+1,2);
//fwrite(&mas[id],sizeof(index),1,f1);
fclose(f); id++;
/*f=fopen("LINK.idx","ab");
S.sport_idx++;
fwrite(&S,sizeof(S),1,f);
fclose(f);*/
break;
case '3':
puts("Выберете индекс фамилии спортсмена:");
char r[100];
f=fopen("FIO.dat","a+");
while(!feof(f))
{
if(fgets(r,100,f))
printf(r);
}
long i;
scanf("%d",&i);
fclose(f);
f=fopen("LINK.idx","ab+");
fseek(f,mas[i].name_idx,SEEK_SET);
fread(&S,sizeof(index),1,f);
printf("ЭТО спорт %d, это имя %d",S.sport_idx,S.name_idx);
int h=0;
for(int i1=0; i1<n;i1++)
{
if(mas[i1].sport_idx==S.sport_idx)
{
printf("\nИндекс спорта = %d",i1);
}
}
fclose(f);
f=fopen("SPORT.dat","a+");
char st1[100];//строка всех строк из файла
char st2[40][100];//здесь будем хранить строки,удобные для дальнейших действий
//puts("\nВот все данные из файла :");
int t=0;
while(!feof(f))//пока файл не закончится
{
if(fgets(st1, 100,f))//пока читается все еще 1 строка(считывает из файла не более 99 символов и запис в st1.Читает пока не достигнется символ новой строки)
{
//printf("%s", st1);//выводим весь поток данных из файла
strcpy(st2[t],st1);//st1 должна заканчиваться нулевым символом
t++;
}
}printf("\nВид спорта - %s",st2[h]);fclose(f);
}
}while(k!=0);
//scanf("%s");
}