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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2009, 17:42   #21
Сэм
Пользователь
 
Регистрация: 12.04.2009
Сообщений: 31
По умолчанию

Простите, если что не так, это во-первых, я ещё пока "чайник". А во-вторых, прошу всё-таки указать где именно я ошибаюсь.
Нижайше прошу сделать мне снисхождение!
Сэм вне форума Ответить с цитированием
Старый 01.05.2009, 17:50   #22
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Простите, если что не так, это во-первых, я ещё пока "чайник"
Неважно, чайник вы или нет. На неоформленный код даже смотреть не хочется. Посмотрите на код в ваших постах и моих. И сравните. Где он читабельнее?
На панели в окне редактирования есть кнопка "#". Нажмите ее, и появятся теги:
Код HTML:
[CODE][/CODE]
Вот между ними и помещайте код.

Если бы вы прочитали правила раздела (http://programmersforum.ru/announcement.php?f=31), то знали бы это.
---------------------------
Цитата:
А во-вторых, прошу всё-таки указать где именно я ошибаюсь.
Я уже объяснял. Вы пишете новую структуру поверх старой. Как еще по-другому сказать?
Вот эта ваша конструкция:
Код:
while (!feof (c))
{
i=1;
fread (&a,sizeof (a),1,c;
i++;
}
не имеет никакого смысла. Вы несколько раз перезаписываете a. И что? Это не дает ровным счетом ничего.

Скажите, чем вас не устраивает мой вариант?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.05.2009, 17:59   #23
Сэм
Пользователь
 
Регистрация: 12.04.2009
Сообщений: 31
По умолчанию

Я Вас понял и ваш вариант меня вполне устраивает. Единственно, помимо тупого списывания, хотелось бы понимать суть вообще и ошибок конкретно, чтобы впредь избегать их, даже таких, как неграмотно оформленный код.
В любом случае, шлю Вам нижайший поклон и огромное СПАСИБО за науку и консультацию! Всех благ и удачи! С праздником весны и труда!
С уважением, СЭМ!
Сэм вне форума Ответить с цитированием
Старый 01.05.2009, 18:09   #24
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Сэм И вас с праздником.

Добавлю, что использовать динамический список будет эффективнее. В моем примере используется временный статический массив из 100 элементов. То есть если элементов меньше 100, то будет использована лишняя память.
Также можно использовать динамический массив (наверное, это будет еще лучше), первоначально узнав, сколько всего элементов в файле.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.05.2009, 18:41   #25
Сэм
Пользователь
 
Регистрация: 12.04.2009
Сообщений: 31
По умолчанию

Вот в задании указано, что создать файл из 10 структур и затем внести в начало списка информацию о четырёх новых. И ВСЁ!
Сэм вне форума Ответить с цитированием
Старый 01.05.2009, 18:44   #26
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Вот в задании указано, что создать файл из 10 структур и затем внести в начало списка информацию о четырёх новых. И ВСЁ!
В таком случае, думаю, вы вольны сами выбирать способ.
Если известно, что в файле точно не больше 10 структур, то и массив можно объявить из 10 элементов (иначе будут 90 лишних).
Ну или динамика (я бы так сделал).
Как Вам проще и понятнее, так и делайте.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.05.2009, 18:52   #27
Сэм
Пользователь
 
Регистрация: 12.04.2009
Сообщений: 31
По умолчанию

Ещё раз, СПАСИБО!
Сэм вне форума Ответить с цитированием
Старый 01.05.2009, 19:09   #28
Сэм
Пользователь
 
Регистрация: 12.04.2009
Сообщений: 31
По умолчанию

Я попробовал Ваш вариант, после добавления выдаёт "абракадабру".
Сэм вне форума Ответить с цитированием
Старый 01.05.2009, 19:16   #29
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Я попробовал Ваш вариант, после добавления выдаёт "абракадабру".
У меня все нормально.
Полный код:
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>

struct spisok
 {
  char familiya[20];
  char nomer[20];
  char data[20];
  } a;
  
void input (FILE*);
void print (FILE*);
void app (FILE*);

int main ()
{
char b; 
FILE*c; 
while (1)
 {
  puts ("1-новый файл");
  puts ("2-просмотр файла");
  puts ("3-добавление в файл");
  puts ("0-выход");
  b=getch ();
  switch (b)
  {
   case '1': input (c); break;
   case '2': print (c); break;
   case '3': app (c); break;
   case '0': return 0;
   default: puts ("неверный режим");
  }
 }
 return 0;
}

void input (FILE*c)
{
 char ch;
 c=fopen ("project.dat","wb");
 printf ("\nВведите информацию о знакомом\n");
 do
  {
   printf ("\nфамилия:"); scanf ("%s",&a.familiya);
   printf ("номер телефона:"); scanf ("%s",&a.nomer);
   printf ("дата рождения:"); scanf ("%s",&a.data);
   fwrite (&a,sizeof (a),1,c);
   printf ("\nЗакончить? y/n");
   ch=getch ();
   } while (ch!='y');
 fclose (c);
}
//-------------------
void print (FILE*c)
{
 int i;
 c=fopen ("project.dat","rb");
 i=1;
 fread (&a,sizeof (a),1,c);
 while (!feof (c))
 {
  printf ("\n%s\nтелефон: %s\nдата рождения: %s",a.familiya,a.nomer,a.data);
  fread (&a,sizeof (a),1,c);
  i++;
 }
getch ();
}

//------------
void app (FILE*c)
{
char ch;
int i,k;
spisok mas[100],tmp;
c=fopen ("project.dat","rb+");
k = 0;
while(!feof(c))
  fread(&mas[k++],sizeof(a),1,c);

rewind (c);
printf ("\nДобавить информацию\n");
do
 {
  printf ("\nфамилия:"); scanf ("%s", &tmp.familiya);
  printf ("номер телефона:"); scanf ("%s",&tmp.nomer);
  printf ("дата рождения:"); scanf ("%s", &tmp.data);
  fwrite (&tmp,sizeof (tmp),1,c);
  
  printf ("\nЗакончить? y/n");
  ch=getch ();
 } while (ch!='y');

for(i=0;i<k;i++)
 fwrite(&mas[i],sizeof(a),1,c); 
 
fclose(c);
}
Вот пример работы.
Код:
1-новый файл
2-просмотр файла
3-добавление в файл
0-выход
 // тут нажал 1
Введите информацию о знакомом

фамили*:1
номер телефона:123
дата рождени*:123

Закончить? y/n
фамили*:2
номер телефона:123
дата рождени*:123

Закончить? y/n
фамили*:3
номер телефона:123
дата рождени*:123

Закончить? y/n1-новый файл
2-просмотр файла
3-добавление в файл
0-выход

// тут нажал 2

1
телефон: 123
дата рождени*: 123
2
телефон: 123
дата рождени*: 123
3
телефон: 123
дата рождени*: 1231-новый файл
2-просмотр файла
3-добавление в файл
0-выход

// тут нажал 3 и добавил 2 записи

Добавить информацию

фамили*:100
номер телефона:123
дата рождени*:123

Закончить? y/n
фамили*:131
номер телефона:123
дата рождени*:123

Закончить? y/n1-новый файл
2-просмотр файла
3-добавление в файл
0-выход

// нажал 2

100
телефон: 123
дата рождени*: 123
131
телефон: 123
дата рождени*: 123
1
телефон: 123
дата рождени*: 123
2
телефон: 123
дата рождени*: 123
3
телефон: 123
дата рождени*: 123

телефон:
дата рождени*: 1-новый файл
2-просмотр файла
3-добавление в файл
0-выход
......................
Как видите, все работает.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.05.2009, 20:05   #30
Сэм
Пользователь
 
Регистрация: 12.04.2009
Сообщений: 31
По умолчанию

Я ещё раз всё пересмотрел, попробовал и всё равно в конце какая-то "абракадабра". Не понимаю, ну да ладно! В принципе, я согласен, всё работает. Буду думать дальше. СПАСИБО!
Сэм вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение Бинарных Файлов Maksitron Общие вопросы C/C++ 6 23.02.2009 21:37
Обработка файлов Си++ modulrev Помощь студентам 22 19.02.2009 18:53
Обработка файлов (Pascal) Дима82 Помощь студентам 10 02.06.2008 21:46