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

Поиск записи в структуре - не могу найти ошибку в написанной программе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ тип char ввод только букв http://www.cyberforum.ru/cpp-beginners/thread668218.html
не работает ограничение на ввод только букв, что я делаю не так? cout<<"Enter a character:"<<endl; cin>>simbol; ...... if((simbol <= 'z' && simbol >= 'a') || (simbol <= 'Z' && simbol >= 'A')) { cout<<"You entered:"<<simbol<<endl; cout<<endl;} else
C++ посчитать произведение нечетных чисел от 1 до 50 Написать общий вид оператора цикла for. Используя этот цикл, посчитать произведение нечетных чисел от 1 до 50. http://www.cyberforum.ru/cpp-beginners/thread668216.html
C++ програма на c++
Сделать программу c++, что с помощью оператора for вычисляет величину: (корень в n-ой степени) n√1*2*3*...*n M=3 N=2 A=6.3 B=2 ((m/n)=1)OR NOT(A<=B)
Написать, используя цикл for, ввод с клавиатуры 10 чисел C++
Написать, используя цикл for, ввод с клавиатуры 10 чисел. Цикл может прерваться, если пользователь ввел любое отрицательное число.
C++ Логичиские выражения http://www.cyberforum.ru/cpp-beginners/thread668197.html
помогите определить значения логических выражений на c++: (m=3, n=2, A=6.3, B=2) A) (1=(M/N)) OR (A<B) B) ((B+A)<(2+M))AND FALSE
C++ не могу найти ошибку ответ получается 0.386223 #include <iostream.h> #include<math.h> #include <stdio.h> void main() { int x= 14.26; int y=-1.22; int z=0.035; подробнее

Показать сообщение отдельно
ekost
 Аватар для ekost
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 31
10.10.2012, 20:08     Поиск записи в структуре - не могу найти ошибку в написанной программе
Делаю лабораторную - там нужно создать некое подобие базы данных с использованием структур.
Одно из заданий - реализовать функцию вывода информации о товаре после запроса названия товара.
Программу я написал по методичке, все работает кроме самого поиска.
Что не введу - оно не находит ничего, пишет, что товар не найден.
Подскажите пожалуйста для чайника - в чем моя ошибка?
вот сам код.
Не работает самая последняя функция в коде.
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
//Лаба 7 - структуры
# include <stdio.h>
# include <string.h>
# include <conio.h>
# include <iostream.h>
 
//-----------------------Константы и структуры--------------
const int len_name=20; // Длина текстовой строки в структуре
 
struct price {
        char tovar[len_name];  // Название товара
        char magaz[len_name]; //  Название магазина
        float cena; // Цена товара
};
const int size_p=sizeof(price); // 
 
//----------------------- Прототипы функций-----------------
 
int create_file (FILE *fbin);
int sort_file (FILE *fbin);
int print_file(FILE *fbin);
int search_tovar (FILE *fbin);
 
//-----------------------Основная программа------------------
 
int main() {
    FILE *fbin;
    char c;
 
    fbin=fopen("price.dat", "r+b"); // Открытие файла
    
    if (!fbin) {
          fbin = fopen("price.dat", "w+b"); // Создание нового файла
          
              if (!fbin) {
              puts("Ошибка открытия файла с данными\n");
              return 1;
          }
     }
     
     //Вывод меню и запуск необходимой функции
     
     while (1) {
          clrscr();
          puts("1. Добавление информации в файл"); 
          puts("2. Сортировка файла по алфавиту"); 
          puts("3. Вывод информации из файла");
          puts("4. Поиск товара по названию"); 
          puts("5. Выход из программы"); 
          puts("_______________________________________");  
          puts("Введите номер пункта меню"); 
          
          c=getch();
          switch (c) {
          case '1': create_file(fbin); break;
          case '2': sort_file(fbin); break;
          case '3': print_file(fbin); break;
          case '4': search_tovar(fbin); break;
          case '5': return 0;
          }
      }
}
//---------------------Запись в файл----------------------
int create_file(FILE *fbin){
 
    price elem;
    fseek(fbin, 0 , SEEK_END); // Указатель в конец файла
    puts ("Ввод данных о товаре\n");
    puts ("Для выхода введите символ *");
    puts("_______________________________________________________");
    
    while (1) {
          puts("Введите название товара");
          cin.getline (elem.tovar, len_name); // Ввод названия товара
          if (!strcmp (elem.tovar, "*")) // Если введена звездочка
              return 1;
          puts ("Введите название магазина"); 
          cin.getline (elem.magaz, len_name); // название магазина
          puts("Введите стоимость товара в гривнах");
          scanf ("%f",&elem.cena); // Цена товара
          fwrite(&elem, size_p, 1, fbin); // запись в файл
     }
}
          
//---------------------Вывод файла-----------------
int print_file(FILE *fbin){
    price elem;
    int n;
    clrscr();
    rewind (fbin); // Указатель в начало файла
    puts("Товар               Магазин             Стоимость"); // шапка таблицы
    puts("___________________________________________________");
    do{
        n=fread(&elem, size_p, 1, fbin); //чтение структуры из файла
        if (n<1) break; // Определение конца файла
        printf("%-20s%-20s%-8.2f\n", elem.tovar, elem.magaz, elem.cena);
    } while (1);
    puts("___________________________________________________");
    puts("Нажмите любую клавишу для выхода");
    getch();
    return 0;
}
 
//----------------------Сортировка записей в файле--------------------------
int sort_file (FILE *fbin) {
    long i,j;
    price elem1, elem2;
    
    puts ("Для сортировки нажмите любую клавишу");
    getch();
    fseek(fbin, 0, SEEK_END); // указатель в конец
    long len = ftell(fbin)/size_p; // Определяем длину файла
    rewind (fbin); // указатель в начало
    
    // пузырьковая сортировка
    for (i=len-1; i>=1; i--)
        for (j=0; j<=i-1; j++) {
            fseek(fbin, j*size_p, SEEK_SET); //указатель на j-запись
            fread(&elem1, size_p, 1, fbin); // читаем запись j в elem
            fread(&elem2, size_p, 1, fbin);// читаем следующую запись
            if (strcmp (elem1.tovar, elem2.tovar)>=1) {
            fseek(fbin,(-2)*size_p,SEEK_CUR); // указатель на 2 позиции назад
            
            // обмен значений
            fwrite(&elem2, size_p,1,fbin); // запись elem2
            fwrite(&elem1, size_p,1,fbin); //  потом запись elem1
        }
     }
     
     puts("Для выхода нажмите любую клавишу");
     getch();
     return 0;
}
 
//--------------------Поиск товара------------ИМЕННО ЗДЕСЬ НЕ РАБОТАЕТ
int search_tovar (FILE *fbin){
    int not_found; // флаг поиска
    char s[len_name]; // Строка поиска
    int n;
    
    price elem;
    
    while (1) {
    puts ("Введите название требуемого товара или '*' для выхода");        
    cin.getline(s, len_name); // Запоминаем товар в строке S
    if (!strcmp(s, "*")) break; // выход, если нажали звездочку
    rewind (fbin); // указатель в начало файла
    not_found=1; // флаг - товар не найден
    
    do {
      n=fread(&elem, size_p, 1, fbin); // чтение записи
      if (n<1) break; // Если n < 1  - то конец файла
      if (strstr(elem.tovar, s)) // Ищем строку s  в поле tovar
       if (elem.tovar[strlen(s)]==' ') { // Имеется пробел после фамилии
        strcpy(s,elem.tovar); // Копируем tovar в s
        puts("____________________________________________");
        puts("Товар               Магазин             Стоимость"); 
        printf("%-20s%-20s%-8.2f\n", elem.tovar, elem.magaz, elem.cena);
        puts("____________________________________________");
        not_found=0; //  товар найден
        }
     } 
     while (1);
     if (not_found)
     puts ("Требуемый товар отсутствует в базе");
   }
  puts ("Для выхода нажмите любую клавишу"); 
  getch();
  return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru