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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2016, 16:41   #1
lianino
 
Регистрация: 07.04.2016
Сообщений: 4
По умолчанию Работа с файлами языка Си

Просьба помочь разобраться, ниже прога, не срабатывает раздел "поиск и изменение", вопрос почему?

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include<stdlib.h>

struct vuz {char name[10]; int k; int kol_f;} t1;// k- кол-во студентов, kol_f - кол-во факультетов
void input(FILE *); // создание нового файла
void print(FILE *); // просмотр файла
void app(FILE *); // добавление в файл
void find(FILE *); // поиск и изменение

main()
{ char c;
FILE *tf;
while (1)
{system("cls");
 puts(" 1 – новый файл");
 puts(" 2 – просмотр файла");
 puts(" 3 – добавление в файл");
 puts(" 4 – поиск и изменение");

 puts(" 0 - выход");
 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(" неверный режим");
 }
}
}
//------- создание нового файла ------//
void input(FILE *tf)
{char ch;
 tf=fopen("file1.dat","wb"); // открытие бинарного файла для записи
 system("cls");
 printf("\n Ввод информации о ВУЗах \n");
 do
 { printf("\n название: "); scanf("%s",t1.name);
  printf(" количество студентов: "); scanf("%d",&t1.k);
  printf(" количество факультетов: "); scanf("%d",&t1.kol_f);
  fwrite(&t1,sizeof(t1),1,tf); // запись в файл одной структуры t1
  printf("\n Закончить? y/n ");
  ch=getch();
 }
while (ch != 'y');
 fclose(tf);
}
//------- просмотр файла -------------//
void print(FILE *tf)
{ int i;
 system("cls");
 tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения
 i=1;
 fread(&t1,sizeof(t1),1,tf); // чтение из файла одной структуры t1
 while (!feof(tf))
 {printf("\n %3d VUZ %10s kol-vo studentov %4d kol-vo fakul'tetov %4d", i, t1.name, t1.k, t1.kol_f);
  fread(&t1,sizeof(t1),1,tf);
  i++;
 }
getch();
}
//------- добавление в файл -------------//
void app(FILE *tf)
{char ch;
 tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления
 system("cls");
 printf("\n Ввод информации о ВУЗах \n");
 do
 { printf("\n название: "); scanf("%s", t1.name);
  printf(" количество студентов: "); scanf("%d",&t1.k);
  printf(" количество факультетов: "); scanf("%d",&t1.kol_f);
  fwrite(&t1,sizeof(t1),1,tf);
  printf(" Закончить? y/n ");
  ch=getch();
 }
while (ch != 'y');
 fclose(tf);
}
//------- поиск и изменение -------------//
void find(FILE *tf)
{char c, vuz[10];
 long int i;
 tf=fopen("file1.dat","rb+"); // открытие бинарного файла для чтения и записи
 system("cls");
 puts(" Название искомого ВУЗа: ");
 gets(vuz);
 fread(&t1,sizeof(t1),1,tf);
 while (!feof(tf))
 {if (strcmp(t1.name,vuz)==0)
  {printf(" VUZ %10s kol-vo studentov %d kol-vo fakul'tetov %d",t1.name,t1.k,t1.kol_f);
   printf("\n изменить? y/n ");
   c=getch();
   if (c=='y')
     { printf("\n количество факультетов: "); scanf("%d",&t1.kol_f);
       printf("\n количество студентов: "); scanf("%d",&t1.k);
       i=sizeof(t1);
       fseek(tf, -i, 1); // возврат на sizeof(t1) байт назад
      fwrite(&t1,sizeof(t1),1,tf);//запись изменённой структуры
     }
   }
fread(&t1,sizeof(t1),1,tf);
}
fclose(tf);
}
______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 09.04.2016 в 11:58.
lianino вне форума Ответить с цитированием
Старый 09.04.2016, 11:52   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

а метод пошаговой детализации не пробовали?
это когда в коде после каждой строчки ставите вывод на экран той величины, которая считается выше. и смотрите, где ещё есть данные и значения, а где они уже обнулились.
вот ваш кусок кода
Код:
{if (strcmp(t1.name,vuz)==0)
{printf(" VUZ %10s kol-vo studentov %d kol-vo fakul'tetov %d",t1.name,t1.k,t1.kol_f);
printf("\n изменить? y/n ");
вот в нём вы условия ставите
Код:
strcmp(t1.name,vuz)==0
а оно вообще выполняется? как-то выведите на экран перед этим названия всех факультетов через цикл. может и не выведутся, а?
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами: запись, добавление, чтение (найти ошибку в коде) / C для начинающих Надо создать программу для работы с файлами Konlor Общие вопросы C/C++ 2 18.05.2014 12:37
TChromium,работа через прокси,изменение языка Дима я Общие вопросы Delphi 1 08.05.2013 08:31
Требуется программист для языка Perl и Parser3, серьезная работа SnakeSG Фриланс 1 07.09.2010 13:39
Работа с функциями языка С Ballantiness Помощь студентам 0 18.05.2010 00:22
Работа с файлами языка Си mastar Помощь студентам 4 17.04.2010 21:06