С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
1

Поиск в файле. Структура данных

01.04.2017, 19:20. Показов 2758. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Мне необходимо создать структуру данных, записать всё в файл и прочитать его. Это всё получилось у меня. У меня структура данных по животным: название, обитание, вес и скорость. Мне необходима ещё сделать поиск в файле по названию, обитанию, весу и скорости. И чтобы вёл например название и он выводит всю инфу по этому животному или ввиду например вес и тоже выводит всю инфу по животным, но только у тех у кого именно этот вес. Я вроде написал алгоритм, но программа ругается в чём проблема? Или можно как то по другому написать? Помогите пожалуйста разобраться с этой проблемой.
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
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <fstream>
#define N 500
using namespace std;
 
struct animal
{
    char name[30];
    char continent[30];
    float weight;
    int speed;        
    }; 
    animal base[N];
//----------------------
void vvod (int n, animal mas[]) 
{int i;
for(i=0; i<n; i++){
    cout<<"\nDates of "<<i+1<<". animal: "<<"\nName: ";
    if (i==0)
    {gets(mas[i].name); gets(mas[i].name);}
    else {gets(mas[i].name); gets(mas[i].name);} 
    cout<<"Continent: ";
    gets(mas[i].continent); 
    cout<<"Weight: ";
    cin>>mas[i].weight;
    cout<<"Speed: ";
    cin>>mas[i].speed;
    
    }
}
//-----------------------------
void vivod (int v, animal mas[])
{int i;
for(i=0; i<v; i++){
cout<<"\nAnimal:";
cout<<"\nName: "<<mas[i].name;
cout<<"\nContinent: "<<mas[i].continent;
cout<<"\nWeight: "<<mas[i].weight;
cout<<"\nSpeed: "<<mas[i].speed;
cout<<endl;
    }
}
//--------------------------TXT-------------------------
void write_file (int n, animal mas[])
{ int i;
ofstream f1;
f1.open("Animals.txt", ios::app);
for(i=0; i<n; i++){
f1<<mas[i].name<<"\n";
f1<<mas[i].continent<<"\n";
f1<<mas[i].weight<<"\n";
f1<<mas[i].speed<<"\n";
   }
f1.close(); 
}
 
void read_file (int v, animal mas[])
{ int i=0;
ifstream f1;
f1.open("Animals.txt");
if (!f1) {cout<<"\nFile open error"; 
    system("Pause>>nul"); exit(1);}
do{
f1>>mas[i].name;
f1>>mas[i].continent;
f1>>mas[i].weight;
f1>>mas[i].speed;
i++;
}
while(!f1.eof());
--------------------------------------- ЧТО ТУТ НЕ ТАК?????????---------------------------------
char buf[N];
int n_record=i, n_animal=0;      
int name=0;
int continent=0;
while(true)
{          cout<<"\nType name or continent "end"  "; 
           cin>>buf;
           if (strcmp(buf,"end")==0) break;
           bool not_found=true;
           for(i=0;i<n_record;i++)
           {                      if (strstr(base[i].name,buf | base[i].continent,buf ))
                                  {cout<<base[i].name<<"\n"<<base[i].continents<<"\n"<<base[i].weight<<"\n"<<base[i].speed<<"\n"; 
                                  n_animal++;
                                  name+=base[i].name;
                                  continent+=base[i].continent;
                                  not_found=false;  
               }         
           }
if (not_found) cout<<"No animal!\n";
}
 
f1.close();
}
 
int main()
{animal mas[N], mastxt[N];
int n,v;
cout<<"Skolko animals dobavitj n= ";
cin>>n;
cout<<"Skolko animals vivesti v= ";
cin>>v;
vvod(n, mas);
vivod(n, mas);
//------- TXT fails-----------
write_file(n, mas);
read_file(v, mastxt);
cout<<"\nDates of txt file: ";
vivod(v, mastxt);
system("Pause>>nul");
return 0;
}
Миниатюры
Поиск в файле. Структура данных  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2017, 19:20
Ответы с готовыми решениями:

Сортировка в файле. Структура данных
Здравствуйте. Я создал структуру данных по животным. Я всё записал в файл и прочитал. Поиск по...

В текстовом файле структура – информация о компьютерах. Структура с полями: название, стоимость.
Ребят, помогите пожалуйста, 29 июня экзамен по &quot;Основы программирования&quot;,кто сколько сможет сделать...

Поиск данных в файле по Фамилии
Нужно написать программу которая будет брать информацию из файла txt формата, например есть файл...

Поиск данных в текстовом файле
Подскажите как можно через массив вывести информацию находящуюся в текстовом файле. ну например у...

8
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.04.2017, 19:48 2
Лучший ответ Сообщение было отмечено MaksimLev как решение

Решение

Кавычки вокруг end экранированы? Логическое ИЛИ - двойная черта, и каждое сравнение - отдельным вызовом strstr().
1
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
01.04.2017, 19:58  [ТС] 3
nmcf, но ошибка первая пропала. 2 остались, это в строчках:
name+=base[i].name; // 'char' to 'int'
continent+=base[i].continent; // 'char' to 'int'
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.04.2017, 20:01 4
У тебя name в структуре - текстовое поле, что ты пытаешься этими строками получить?
0
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
01.04.2017, 20:09  [ТС] 5
nmcf, ок. я их убрал, всё заработала, но пишешь названия животных или обитание, то он их не находит. пишет что не найдено.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.04.2017, 20:14 6
По-английски попробуй вводить и искать.
0
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
01.04.2017, 20:18  [ТС] 7
nmcf, я так и делаю. Я по русски там не пишу никогда.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.04.2017, 20:50 8
Актуальный вариант давай.
1
0 / 0 / 1
Регистрация: 14.02.2017
Сообщений: 102
01.04.2017, 21:13  [ТС] 9
nmcf, вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char buf[N];
int n_record=i, n_animal=0;      
int name=0;
int continent=0;
while(true)
{          cout<<"\nType name or continent "end"  "; 
           cin>>buf;
           if (strcmp(buf,"end")==0) break;
           bool not_found=true;
           for(i=0;i<n_record;i++)
           {                      if (strstr(strstr(base[i].name, buf) || strstr(base[i].continent, buf))
                                  {cout<<base[i].name<<"\n"<<base[i].continents<<"\n"<<base[i].weight<<"\n"<<base[i].speed<<"\n"; 
                                  n_animal++;
                                  not_found=false;  
               }         
           }
if (not_found) cout<<"No animal!\n";
}
 
f1.close();
}
Добавлено через 4 минуты
end - работает.

Добавлено через 12 минут
nmcf, всё я сам разобрался. Вместо base[i] надо было написать mas[i] .
0
01.04.2017, 21:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2017, 21:13
Помогаю со студенческими работами здесь

Поиск данных в файле по ключевому полю
Как можно производить поиск данных в файле по ключевому полю??? есле сможете можно ли пример или...

Поиск в текстовом файле всех слов, заданных в другом текстом файле
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле; Не...

Структура в заголовочном файле
Код .h: // file.h #pragma once struct Worker { char name; int cdate; int vdate; char...

Структура в бинарном файле
У меня проблема с бинарными файлами. Помогите, пожалуйста, правильно оформить ввод структуры в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru