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

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

Войти
Регистрация
Восстановить пароль
 
The1Phoenix
2 / 2 / 0
Регистрация: 28.03.2012
Сообщений: 76
#1

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

11.09.2012, 22:00. Просмотров 366. Ответов 5
Метки нет (Все метки)

В общем... Не могу разобраться, почему 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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2012, 22:00     Не изменяет запись
Посмотрите здесь:

C++ Описать функцию, которая изменяет заданную строку следующим образом
C++ fread изменяет неиспользуеммые ею переменные
C++ Составить программу которая переворачивает список L, изменяет ссылки в этом списке так, чтобы его элементы оказались расположенными в обратном порядке
Программа которая изменяет динамический массив строк - Написал, но есть ошибка C++
C++ некоретно изменяет буквы
Ссылочный параметр не изменяет переменную в Main C++
C++ функция изменяет старший байт числа на заданное значение не изменяя младший байт
C++ Костантный метод изменяет значения переменных класса
C++ Формирование и просмотр списка и функция, которая изменяет каждое значение информационной части элемента списка на его квадрат
C++ Не пойму почему перменная d изменяет значения
C++ Функция, которая изменяет первоначальное значение переменной и хранит его до следующего вызова
Функция не изменяет масссив C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
4220 / 2194 / 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
5415 / 4811 / 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     Не изменяет запись
Ответ Создать тему
Опции темы

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