Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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



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

Здравствуйте. Помогите найти ошибку. Задание в комментарии.
Код:

#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");
}

Лакира вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




19:39.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru