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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2009, 21:44   #11
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

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

Да написать можно, но дело в том, что остальные функции работают исправно, а эта нет. Имеет ли смысл писать всё?
Сэм вне форума Ответить с цитированием
Старый 01.05.2009, 15:49   #13
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Имеет ли смысл писать всё?
А каким образом вы предлагаете искать ошибку, если код нельзя скомпилировать? Визуально сложно что-то обнаружить (в большинстве случаев).

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

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

Понял, пишу! Это займёт некоторое время.
Сэм вне форума Ответить с цитированием
Старый 01.05.2009, 16:14   #15
Сэм
Пользователь
 
Регистрация: 12.04.2009
Сообщений: 31
Радость

#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*);
main ()
{char b; FILE*c; while (1)
{clrscr ();
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 ("неверный режим");}}}
void input (FILE*c)
{char ch;
c=fopen ("project.dat","wb");
clrscr ();
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;
clrscr ();
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 ();}
А далее то, что печатал выше!
Прошу прощения, если долго - отвлекают!
Сэм вне форума Ответить с цитированием
Старый 01.05.2009, 16:38   #16
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Так. Во-первых, используйте тег CODE. Код невозможно читать!
Во-вторых, структурируйте свой код. Посмотрите сами - все в одну кучу.

Теперь по проблеме.
В функции app вы считываете первую запись, но потом тут же затираете ее. То есть происходит простая замена записи новой.

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

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

Можете продемонстрировать?
Сэм вне форума Ответить с цитированием
Старый 01.05.2009, 17:09   #18
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Можете продемонстрировать?
Код:
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);
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

Я понял! А я в это время попробовал написать так:
void app (FILE*c)
{
char ch;
int i;
clrscr ();
c=fopen ("project.dat","rb+);
while (!feof (c))
{
i=1;
fread (&a,sizeof (a),1,c;
i++;
}
rewind (c);
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);
}
Как такой вариант?
Сэм вне форума Ответить с цитированием
Старый 01.05.2009, 17:34   #20
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Sazary
Так. Во-первых, используйте тег CODE. Код невозможно читать!
Вы это проигнорировали?
Цитата:
Как такой вариант?
И что это за вариант? Как перезаписывали поверх того, что было, так и перезаписываете. Ничего не изменилось.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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