Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2017, 13:23   #1
Лакира
Пользователь
 
Регистрация: 17.11.2016
Сообщений: 28
По умолчанию проблема с бинарным файлом

Здравствуйте. Помогите найти ошибку. Задание в комментарии.
Код:
#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");
}
Лакира вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с бинарным файлом eymar Общие вопросы C/C++ 1 30.11.2012 00:22
Проблема с бинарным файлом. ololo666 Общие вопросы C/C++ 0 06.06.2012 11:26
Работа с бинарным файлом. griba Помощь студентам 4 11.12.2010 13:08
Проблема с бинарным файлом melodeen12 Операционные системы общие вопросы 6 02.08.2010 01:15
работа с бинарным файлом Bayazet Помощь студентам 3 17.03.2009 15:37