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

Не изменяет запись - C++

Восстановить пароль Регистрация
 
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
11.09.2012, 22:00     Не изменяет запись #1
В общем... Не могу разобраться, почему 4-ая(find) функция не меняет данные...Помогите, пожалуйсто.)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <Windows.h>
 
struct tov {char name[10]; float c; int kol;} t1;
 
void input(FILE *); // создание нового файла
void print(FILE *); // просмотр файла
void app(FILE *); // добавление в файл
void find(FILE *); // поиск и изменение
 
int main()
{ SetConsoleCP(1251); SetConsoleOutputCP (1251);
    char c;
 FILE *tf;
while (1)
{
puts("\n* 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"); // открытие бинарного файла для записи
printf("\n Ввод товаров\n");
do { printf("\n название: "); scanf("%s",t1.name);
printf(" цена: "); scanf("%f",&t1.c);
printf(" количество: "); scanf("%d",&t1.kol);
fwrite(&t1,sizeof(t1),1,tf); // запись в файл одной структуры t1
printf("\n Закончить? *y/n *");
ch=getch();}
while (ch != 'y');
fclose(tf);
}
 
void print(FILE *tf)
{ int i;
tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения
i=1;
fread(&t1,sizeof(t1),1,tf); // чтение из файла одной структуры t1
while (!feof(tf))
{ printf("\n* %3d. Товар: %10s, цена: %6.2f, количество: %4d",i,t1.name,t1.c,t1.kol);
fread(&t1,sizeof(t1),1,tf);
i++;}
getch();
}
 
void app(FILE *tf)
{ char ch;
tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления
 
printf("\n *Ввод товаров \n");
do {printf("\n Название: "); scanf("%s",t1.name);
printf(" Цена: "); scanf("%f",&t1.c);
printf(" Количество: "); scanf("%d",&t1.kol);
fwrite(&t1,sizeof(t1),1,tf);
printf(" Закончить? *y/n ");
ch=getch();}
while (ch != 'y');
fclose(tf);
}
 
void find(FILE *tf)
{ char c,tov[10];
long int i;
tf=fopen("file1.dat","rb+");
puts(" Название искомого товара: ");
gets(tov);
fread(&t1,sizeof(t1),1,tf);
while (!feof(tf))
{if (strcmp(t1.name,tov)==0)
{printf("Товар %10s, цена: %6.2f, количество: %d",t1.name,t1.c,t1.kol);
printf("\n Изменить? y/n ");
c=getch();
if (c=='y')
{printf("\n Количество: ");scanf("%d",&t1.kol);
printf("\n Цена: ");scanf("%f",&t1.c);
i=sizeof(t1);
fseek(tf,-i,1);
fwrite(&t1,sizeof(t1),1,tf);
}}
fread(&t1,sizeof(t1),1,tf);}
fclose(tf);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.09.2012, 22:10     Не изменяет запись #2
Ну откуда берете такие конструкции
while (!feof(tf))
уж куда более правильно
while(fread(&t1,sizeof(t1),1,tf))
Ваша конструкция сопряжена с массой аварийных и сбойных ситуаций.
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
11.09.2012, 22:13  [ТС]     Не изменяет запись #3
Цитата Сообщение от Thinker Посмотреть сообщение
Ну откуда берете такие конструкции
while (!feof(tf))
уж куда более правильно
while(fread(&t1,sizeof(t1),1,tf))
Ваша конструкция сопряжена с массой аварийных и сбойных ситуаций.
Ну, видимо, пхп даёт о себе знать =\ спасибо, сейчас првоерю)
Thinker
11.09.2012, 22:15
  #4

Не по теме:

Да нет, это в общем случае. у вас же fseek() имеется, там другой нужен цикл.

alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.09.2012, 09:34     Не изменяет запись #5
С исправлениями:
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <Windows.h>
 
struct tov {char name[10]; float c; int kol;} t1;
 
void input(FILE *); // создание нового файла
void print(FILE *); // просмотр файла
void app(FILE *); // добавление в файл
void find(FILE *); // поиск и изменение
FILE *tf = NULL;
int main()
{ SetConsoleCP(1251); SetConsoleOutputCP (1251);
    char c;
 
while (1)
{
puts("\n* 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"); // открытие бинарного файла для записи
printf("\n Ввод товаров\n");
do { printf("\n название: "); scanf("%s",t1.name);
printf(" цена: "); scanf("%f",&t1.c);
printf(" количество: "); scanf("%d",&t1.kol);
fwrite(&t1,sizeof(t1),1,tf); // запись в файл одной структуры t1
printf("\n Закончить? *y/n *");
ch=getch();}
while (ch != 'y');
 
fclose(tf);
}
 
void print(FILE *tf)
{ int i;
tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения
i=1;
fread(&t1,sizeof(t1),1,tf); // чтение из файла одной структуры t1
while (!feof(tf))
{ printf("\n* %3d. Товар: %10s, цена: %6.2f, количество: %4d",i,t1.name,t1.c,t1.kol);
fread(&t1,sizeof(t1),1,tf);
i++;}
getch();
}
 
void app(FILE *tf)
{ char ch;
tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления
 
printf("\n *Ввод товаров \n");
do {printf("\n Название: "); scanf("%s",t1.name);
printf(" Цена: "); scanf("%f",&t1.c);
printf(" Количество: "); scanf("%d",&t1.kol);
fwrite(&t1,sizeof(t1),1,tf);
printf(" Закончить? *y/n ");
ch=getch();}
while (ch != 'y');
fclose(tf);
}
 
void find(FILE *tf)
{ char c,tov[10];
long int i;
int flag = 0;
tf=fopen("file1.dat","rb+");
puts(" Название искомого товара: ");
flushall();
gets(tov);
fread(&t1,sizeof(t1),1,tf);
while (!feof(tf))
{
  if (strcmp(t1.name,tov)==0)
    {
       flag = 1;
       printf("Товар %10s, цена: %6.2f, количество: %d",t1.name,t1.c,t1.kol);
       printf("\n Изменить? y/n ");
       c=getch();
       if (c=='y')
       {
           printf("\n Цена: ");scanf("%f",&t1.c);
           printf("\n Количество: ");scanf("%d",&t1.kol);
           i=sizeof(t1);
           fseek(tf, -i, SEEK_CUR);
           fwrite(&t1,sizeof(t1),1,tf);
           break;
        } 
     }
  fread(&t1,sizeof(t1),1,tf);
}
if (flag == 0) printf("\n Товар не найден\n");
fclose(tf);
}
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
12.09.2012, 17:42  [ТС]     Не изменяет запись #6
Цитата Сообщение от alsav22 Посмотреть сообщение
С исправлениями:
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <Windows.h>
 
struct tov {char name[10]; float c; int kol;} t1;
 
void input(FILE *); // создание нового файла
void print(FILE *); // просмотр файла
void app(FILE *); // добавление в файл
void find(FILE *); // поиск и изменение
FILE *tf = NULL;
int main()
{ SetConsoleCP(1251); SetConsoleOutputCP (1251);
    char c;
 
while (1)
{
puts("\n* 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"); // открытие бинарного файла для записи
printf("\n Ввод товаров\n");
do { printf("\n название: "); scanf("%s",t1.name);
printf(" цена: "); scanf("%f",&t1.c);
printf(" количество: "); scanf("%d",&t1.kol);
fwrite(&t1,sizeof(t1),1,tf); // запись в файл одной структуры t1
printf("\n Закончить? *y/n *");
ch=getch();}
while (ch != 'y');
 
fclose(tf);
}
 
void print(FILE *tf)
{ int i;
tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения
i=1;
fread(&t1,sizeof(t1),1,tf); // чтение из файла одной структуры t1
while (!feof(tf))
{ printf("\n* %3d. Товар: %10s, цена: %6.2f, количество: %4d",i,t1.name,t1.c,t1.kol);
fread(&t1,sizeof(t1),1,tf);
i++;}
getch();
}
 
void app(FILE *tf)
{ char ch;
tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления
 
printf("\n *Ввод товаров \n");
do {printf("\n Название: "); scanf("%s",t1.name);
printf(" Цена: "); scanf("%f",&t1.c);
printf(" Количество: "); scanf("%d",&t1.kol);
fwrite(&t1,sizeof(t1),1,tf);
printf(" Закончить? *y/n ");
ch=getch();}
while (ch != 'y');
fclose(tf);
}
 
void find(FILE *tf)
{ char c,tov[10];
long int i;
int flag = 0;
tf=fopen("file1.dat","rb+");
puts(" Название искомого товара: ");
flushall();
gets(tov);
fread(&t1,sizeof(t1),1,tf);
while (!feof(tf))
{
  if (strcmp(t1.name,tov)==0)
    {
       flag = 1;
       printf("Товар %10s, цена: %6.2f, количество: %d",t1.name,t1.c,t1.kol);
       printf("\n Изменить? y/n ");
       c=getch();
       if (c=='y')
       {
           printf("\n Цена: ");scanf("%f",&t1.c);
           printf("\n Количество: ");scanf("%d",&t1.kol);
           i=sizeof(t1);
           fseek(tf, -i, SEEK_CUR);
           fwrite(&t1,sizeof(t1),1,tf);
           break;
        } 
     }
  fread(&t1,sizeof(t1),1,tf);
}
if (flag == 0) printf("\n Товар не найден\n");
fclose(tf);
}
Спасибо большое! Помогло)
Yandex
Объявления
12.09.2012, 17:42     Не изменяет запись
Ответ Создать тему
Опции темы

Текущее время: 21:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru