Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AI\EKCAH^P
104 / 101 / 20
Регистрация: 18.05.2009
Сообщений: 201
#1

создать файл - C++

29.05.2009, 17:00. Просмотров 600. Ответов 2
Метки нет (Все метки)

Помогите пожайлуста исправить программу. Файл вроде создает,а вот просмотр,добавление и изменение никак. Подскажите как поменять местами в файле записи о первых двух спортсменах.Заранее благодарен!
Используя функции и режим меню, создать файл из 10 структур, просмотреть файл, добавить в файл новую информацию , применяя режим прямого доступа.
Структура имеет вид: фамилия спортсмена, его номер, количество набранных очков. Поменять местами в файле записи о первых двух спортсменах.
Код
[CPP]#include<stdio.h>
#include<conio.h>
#include<string.h>

struct sport{char name[10];int number;int kol;}sp;
void input(FILE *);
void print(FILE *);
void app(FILE *);
void find(FILE *);
main()
 { char c;
 FILE *tf;
 while (1)
 {
 puts("1-novuy fail");
 puts("2-prosmotr faila");
 puts("3-dobavlenie v fail");
 puts("4-poisk i izmenenie");
 puts("0-vyhod");
 c=getch();
 switch(c)
 {case '1':input(tf); break;
  case '2':input(tf);break;
  case '3':input(tf);break;
  case '4':input(tf);break;
  case '0':input(tf);break;
  default : puts("nevernuy regim");
  }
  }
  }
  void input(FILE *tf)
   {char ch;
   tf=fopen("FILE1.dat","wb");
   printf("\n vvedite informaciu o sportcmene \n");
   do
   { printf("\n familiya: "); scanf("%s",sp.name);
   printf(" nomer: "); scanf("%d",&sp.number);
   printf(" kolichestvo ochkov: "); scanf("%d",&sp.kol);
   fwrite(&sp,sizeof(sp),1,tf);
   printf("\n Zakonchity ? y/n");
   ch=getch();
   }
   while (ch != 'y');
   fclose(tf);
   }
   void print(FILE*tf)
   { int i; 
   tf=fopen("file.dat","rb");
   i=1;
   fread(&sp,sizeof(sp),1,tf);
   while(!feof(tf))
   {printf("\n %3d familiya %10s number %6d kolichestvo ochkov %4d ",i,sp.name,sp.number,sp.kol);
   fread(&sp,sizeof(sp),1,tf);
   i++;
   }
   getch();
   }
   void app(FILE *tf)
   {char ch;
   tf=fopen("file1.dat","ab");
   printf("\n vvedite informaciu o sportcmene \n");
   do
   { printf("\n familiya: "); scanf("%s",sp.name);
   printf(" nomer: "); scanf("%d",&sp.number);
   printf(" kolichestvo ochkov: "); scanf("%d",&sp.kol);
   fwrite(&sp,sizeof(sp),1,tf);
   printf("\n Zakonchity ? y/n");
   ch=getch();
   }
   while (ch != 'y');
   fclose(tf);
   }
   void FIND(FILE*tf)
   {char c, sport[10];
   long int i;
   tf=fopen("file1.dat","rb+");
   puts(" Familiya sportcmena: ");
   gets(sport);
   fread(&sp,sizeof(sp),1,tf);
   while (!feof(tf))
   {if (strcmp(sp.name,sport)==0)
   {printf(" familya %10s number %6.2d kolichestvo ochkov %d",sp.name,sp.number,sp.kol);
   printf("/n Izmenity ? y/n");
   c=getch();
   if (c=='y')
   {printf("\n kolichestvo: "); scanf("%d",&sp.kol);
   printf("\n number: "); scanf("%d",&sp.number);
   i=sizeof(sp);
   fseek(tf,-i,1);
   fwrite(&sp,sizeof(sp),1,tf);
   }
   }
   fread(&sp,sizeof(sp),1,tf);
   }
   fclose(tf);
   }
   [/CPP]
Добавлено через 4 часа 8 минут 24 секунды
Подправил. Создание, добавление и чтение работают. Поиск, вроде, тоже.А вот поменять местами в файле записи первых двух спортсменов не могу. Помогите.
Код
[CPP]#include <stdio.h>
#include <conio.h>
#include <string.h>

struct sport
{
 char name[10];
 int number;
 int kol;
 } sp;

void input(FILE *);
void print(FILE *);
void app(FILE *);
void find(FILE *);

main()
 {
 char c;
 FILE *tf;
 while (1)
 {
 puts("\n 1-novuy fail");
 puts(" 2-prosmotr faila");
 puts(" 3-dobavlenie v fail");
 puts(" 4-poisk i izmenenie");
 puts(" 0-vyhod");
 c=getch();
 switch(c)
  {
  case '1':input(tf); break;
  case '2':print(tf);break;
  case '3':app(tf);break;
  case '4':find(tf);break;
  case '0':return 0;
  default : puts("nevernuy regim");
  }
 }
}

//----------
void input(FILE *tf)
{
   char ch;
   tf=fopen("file.dat","wb");
   printf("\n vvedite informaciu o sportcmene \n");
   do
   {
   printf("\n familiya: "); scanf("%s",sp.name);
   printf(" nomer: "); scanf("%d",&sp.number);
   printf(" kolichestvo ochkov: "); scanf("%d",&sp.kol);
   fwrite(&sp,sizeof(struct sport),1,tf);
   printf("\n Zakonchity ? y/n");
   ch=getch();
   }
   while (ch != 'y');
   fclose(tf);
}

void print(FILE *tf)
{
  int i;
   tf=fopen("file.dat","rb");
   i=1;
   fread(&sp,sizeof(struct sport),1,tf);

   while(!feof(tf))
   {
    printf("\n %3d familiya %10s number %6d kolichestvo ochkov %4d ",i,sp.name,sp.number,sp.kol);
    fread(&sp,sizeof(struct sport),1,tf);
    i++;
   }
getch();
}


void app(FILE *tf)
{
char ch;
tf=fopen("file.dat","ab");
printf("\n vvedite informaciu o sportcmene \n");
   do
   {
   printf("\n familiya: "); scanf("%s",sp.name);
   printf(" nomer: "); scanf("%d",&sp.number);
   printf(" kolichestvo ochkov: "); scanf("%d",&sp.kol);
   fwrite(&sp,sizeof(sp),1,tf);
   printf("\n Zakonchity ? y/n");
   ch=getch();
   }   while (ch != 'y');
fclose(tf);
}


void find(FILE*tf)
{
char c, sport[10];
long int i;
tf=fopen("file.dat","r+b");
puts(" Familiya sportcmena: ");
gets(sport);
fread(&sp,sizeof(sp),1,tf);
 while (!feof(tf))
  {
   if (strcmp(sp.name,sport)==0)
    {
    printf(" familya %10s number %6.2d kolichestvo ochkov %d",sp.name,sp.number,sp.kol);
    printf("/n Izmenity ? y/n");
    c=getch();
    if (c=='y')
     {
      printf("\n kolichestvo: ");
      scanf("%d",&sp.kol);
      printf("\n number: ");
      scanf("%d",&sp.number);
      i=sizeof(sp);
      fseek(tf,-i,1);
      fwrite(&sp,sizeof(sp),1,tf);
     }
    }
  fread(&sp,sizeof(sp),1,tf);
  }
fclose(tf);

}[/CPP]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2009, 17:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос создать файл (C++):

Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке - C++
Пожалуйста, помогите решить задачу в C++!!! Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но...

создать файл 1.part и записать в него первые x элементов массива. После чего, создать второй файл 2.part, куда записать оставшиеся в массиве элементы. - C++
Не могу понять почему не работает вот этот кусок текста. ofstream q (&quot;1.part&quot;); for (int i=0; i&lt;10; ++i) { q &lt;&lt; mas ; ...

Файл: Создать файл и записать в него обратные натуральные числа 1,1/2,...1/n. - C++
Помогите подготовиться к отчету.Создать файл и записать в него обратные натуральные числа 1,1/2,...1/n.Вывести на экран все компоненты...

Подскажите, нужно перегрузить оператор или создать метод(если создать то не понимаю как) записи в файл - C++
вот как я хотел сделать запись в файл перегрузкой #pragma once #include &quot;iostream&quot; #include &quot;conio.h&quot; #include &quot;fstream&quot; class...

Создать файл с квадратной матрицей; чётные элементы переместить в один файл, нечётные - в другой - C++
• Создать файл с массивом А. • Четные элементы переместить в файл А • Нечетные элементы переместить в файл В Не могу понять Как...

Есть файл f, c целыми числами. Создать новый файл g где все компоненты файла f в квадрате. - C++
Помогите пожалуйста на завтра!:'( Есть файл f, c целыми числами. Создать новый файл g где все компоненты файла f в квадрате. Заранее...

2
AI\EKCAH^P
104 / 101 / 20
Регистрация: 18.05.2009
Сообщений: 201
31.05.2009, 21:23  [ТС] #2
Подскажите ка поменять местами в файле записи первых двух спортсменов
0
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
31.05.2009, 21:32 #3
По-моему придется считывать весь файл в массив... затем в этом массиве елементы менять местами... а затем обратно в файл.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2009, 21:32
Привет! Вот еще темы с ответами:

Дан текстовый файл. Создать символьный файл, содержащий все знаки препинания, встретившиеся в текстовом файле - C++
Дан текстовый файл. Создать символьный файл, содержащий все знаки препинания, встретившиеся в текстовом файле (в том же порядке).

Создать текстовый файл и записать в двоичный файл - C++
В программах необходимо использовать только динамические структуры. 1. Написать первую программу, которая считывает информацию из...

Дан символ 'C' (прописная латинская буква) и текстовый файл. Создать строковый файл, содержащий все слова из исходного файла - C++
Дан символ 'C' (прописная латинская буква) и текстовый файл. Создать строковый файл, содержащий все слова из исходного файла, начинающиеся...

Создать бинарный файл и текстовый файл - C++
Вот, к примеру, я написал программу для введения 5 чисел в текстовый файл, а как будет выглядеть программа бинарного файла? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru