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

Не получается считать информацию из фаила (описать структуру с именем MARSH) - C++

Восстановить пароль Регистрация
 
CAPTAIN_HURMA
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
29.05.2013, 22:36     Не получается считать информацию из фаила (описать структуру с именем MARSH) #1
Не получается считать информацию из файла.
Все остальные действия программы кроме считывания информации из файла работают нормально.
Ошибка кроется между 114 и 128 строками,
я не понимаю как её исправить и что там надо дописать,уже попросту не соображаю под вечер,решил обратиться за помощью на форум.
Помогите пожалуйста.


Условия задачи:
Создать однофайловое консольное приложение (проект).
В этом проекте описать структуру, соответствующую предметной области вашего индивидуального задания. Для хранения данных использовать массив, состоящий из n элементов типа этой структуры. Количество переменных типа структуры (величину n) вводить с клавиатуры в процессе выполнения программы.

Программа должна предлагать меню для выбора режима работы с ней.
Выбрав соответствующую опцию меню, можно производить следующие действия:
1). Вводить данные в структуру двумя способами: из текстового файла и с клавиатуры. Выбор способа ввода должен осуществляться из программы. Возможен вариант, когда в одном сеансе работы часть данных вводится из файла, а часть – с клавиатуры.
2). Просматривать все введенные данные в отсортированном порядке по полю, указанному в вашем индивидуальном варианте.
3). Выводить информацию по запросу с клавиатуры. Если по запросу данных нет, выдать на монитор соответствующее сообщение.
4). Удалять информацию по запросу.

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

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


Задание:

Описать структуру с именем MARSH,содержащую следующие поля;
1)Название начального пункта маршрута;
2)Название конечного пункта маршрута;
3)Номер маршрута.
Написать программу, выполняющую следующие действия:
1)Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа
MARSH;
2)Вывод на экран информации о маршрутах, которые начинаются или оканчиваются в пункте, название которого введено с клавиатуры;
3)Если таких маршрутов нет, выдать на дисплей соответствующее сообщение


Код программы:

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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include <iostream>
#include <cctype>
#include <cstring>
#include <iomanip>
#include <fstream>
#include <Windows.h>
 
using namespace std;
 
 
    struct Route
    {
        char start[50];
        char end[50];
        int number; 
    };
 
void enter(Route *trais1, int *size_adress) , init_list(Route *trais1, int *size_adress);
void search(Route *trais1, int *size_adress) , Choose_delete(Route *trais1, int *size_adress);
void display(Route *trais1, int *size_adress), file_enter(Route *trais1, int *size_adress);
void Save_file(Route *trais1, int *size_adress);
int menu();
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char choice;
    cout << "Введите размерность массива " << endl;
    int size;
    cin >> size;
    Route *trais = new Route[size];
    init_list(trais, &size);
    for(int i = 1;i>0;i=i+0)
    {
        choice = menu();
        switch ( choice )
        {
        case 'а' : enter(trais, &size);          
            break;                  
        case 'б' : file_enter(trais, &size);               
            break;      
        case 'в' : Save_file (trais, &size);
            break;
        case 'г' : display(trais, &size);                               
            break;                                               
        case 'д' : search(trais, &size);                                  
            break;                                         
        case 'е' : Choose_delete(trais, &size);                      
            break;                                       
        case 'ж' : return 0;                                     
        }                            
    }
}
void init_list(Route *trais1, int *size_adress)
{
    int i;
    for( i = 0; i<*size_adress; i++) 
        *trais1[i].start = '\0';                             
}   
int menu()
{
    char ch;
    cout << endl ;
    do 
    { 
      cout<<"--------------------------------------\n";
      cout<<"|   (А)-|-Ввод_ручной                |\n";
      cout<<"|   (Б)-|-Вывод_данных_из_файла      |\n";
      cout<<"|   (В)-|-Сохранение_данных_в_файл   |\n";
      cout<<"|   (Г)-|-Просмотр_всех_данных       |\n";
      cout<<"|   (Д)-|-Поиск_по_номеру_поезда     |\n";
      cout<<"|   (Е)-|-Удаление_данных            |\n";
      cout<<"|   (Ж)-|-Выход                      |\n";
      cout<<"--------------------------------------\n";
      cout << "Выберите команду: "; cin >> ch;
      cin.ignore();
    } while (!strchr("абвгдеж", tolower(ch)));                            
    return tolower(ch);
}
void enter(Route *trais1, int *size_adress) 
{
    int i;
    for(i=0; i<*size_adress; i++ )
        if (!*trais1[i].start)
            break;  
        else 
            continue;
    if (i==*size_adress)                                              
    {                                             
        cout <<"Список полон \n";
        return;
    }
        cout << "Введите начальный пункт " << endl;
        cin.getline  ( trais1[i].start,50) ;
        cout << "Введите конечный пункт " << endl;
        cin.getline ( trais1[i].end,50);
        cout << "Введите номер " << endl;
        cin >>trais1[i].number;
        cin.ignore();
}
void file_enter(Route *trais1, int *size_adress) 
{                                     
    int i;                           
    for(i=0; i<*size_adress; i++ )           
        if (!*trais1[i].start) break;
        else 
            continue;
    if (i==*size_adress)
    {
        cout <<"Список полон\n";
        return;
    }
    ifstream fin("MARSH.txt"); 
    int j = i;
 
    while (!fin.eof() || (j <*size_adress))
    {
        
        fin.getline(trais1[j].start,50); 
        fin.getline(trais1[j].end,50);      
        fin >> trais1[j].number; 
        cin.ignore();
 
        j++;
    }
    fin.close();
}
void Save_file(Route *trais1, int *size_adress)
{
    ofstream put;
    put.open("MARSH.txt");
    for(int i=0; i<*size_adress; i++ )
        if (*trais1[i].start)            
            put<<trais1[i].start<<"\n"<<trais1[i].end  << 
            "\n" << trais1[i].number << "\n";
    put.close();
}
void Choose_delete(Route *trais1, int *size_adress)
{
    int deletenumber;
    cout<<"Введите данные (Номер поезда) для удаления: " << endl;
    cin >> deletenumber;
    for (int i = 0; i<*size_adress; i++ )
    {
        if ( deletenumber == trais1[i].number)                                       
        *trais1[i].start = '\0';                     
    }
}
void search(Route *trais1, int *size_adress)
{
    char station[50];
    cout<<"Пожалуйста,введите название пункта:";
    cin.getline (station,50);
    bool net_marsh = true;
    for(int i = 0; i < *size_adress; i++)
    {
        if(((strcmp(trais1[i].start,station) == 0) || (strcmp(trais1[i].end,station) == 0)))
        {
            cout <<" n= "<<trais1[i].number<<" Из= "<<trais1[i].start<<" в= "<<trais1[i].end<<endl;
            net_marsh = false;
        }
    }
    if ( net_marsh)
        cout << "Этот пункт не существует \n";
}
void display(Route *trais1, int *size_adress)
{
    for(int i = 0; i < *size_adress-1; i++)
    {
        int min = i;
        for(int j = i+1; j < *size_adress; j++)
            if (trais1[j].number < trais1[min].number )
                min = j;
        Route a = trais1[min];
        trais1[min] = trais1[i];
        trais1[i] = a;
    }
    cout << "==========================================="<<endl;
    for(int i = 0; i < *size_adress; i++)
    if (*trais1[i].start)
        cout <<" n= "<<trais1[i].number<<" Из= "<<trais1[i].start<<" в= "<<trais1[i].end<<endl;
    cout << "==========================================="<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 22:36     Не получается считать информацию из фаила (описать структуру с именем MARSH)
Посмотрите здесь:

C++ Описать структуру с именем MARSH
C++ Разработать структуру с именем MARSH
C++ Описать структуру с именем MARSH
C++ Описать структуру с именем Student
C++ Описать структуру с именем MARSH
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 00:01     Не получается считать информацию из фаила (описать структуру с именем MARSH) #2
125
C++
1
fin.ignore();
CAPTAIN_HURMA
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 00:28  [ТС]     Не получается считать информацию из фаила (описать структуру с именем MARSH) #3
К сожалению это не исправляет проблему.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 00:36     Не получается считать информацию из фаила (описать структуру с именем MARSH) #4
Цитата Сообщение от CAPTAIN_HURMA Посмотреть сообщение
К сожалению это не исправляет проблему.
Что конкретно не работает? Как это выглядит?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 00:39     Не получается считать информацию из фаила (описать структуру с именем MARSH) #5
У меня информация из файла считывается.
Миниатюры
Не получается считать информацию из фаила (описать структуру с именем MARSH)  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 00:45     Не получается считать информацию из фаила (описать структуру с именем MARSH) #6
Если нужно сразу вывести на экран то, что считалось из файла, то добавьте в конце file_enter():
C++
1
display(trais1, size_adress);
Тогда будет так работать.
Миниатюры
Не получается считать информацию из фаила (описать структуру с именем MARSH)  
CAPTAIN_HURMA
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 00:46  [ТС]     Не получается считать информацию из фаила (описать структуру с именем MARSH) #7
Ого,круто,завидую)
У меня это всё выглядит вот так,даже не получается уйти дальше выбора меню "Вывод_данных_из_фаила".
Извини,ты не мог бы целиком кинуть этот волшебный код с помощью которого у тебя получилось считать данные с фаила?Просто я видать уже в конец запутался.
Миниатюры
Не получается считать информацию из фаила (описать структуру с именем MARSH)  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 00:55     Не получается считать информацию из фаила (описать структуру с именем MARSH) #8
Цитата Сообщение от CAPTAIN_HURMA Посмотреть сообщение
этот волшебный код
Это твой код с одним исправлением, о котором я написал во 2 посте. Запись в файл была (Сохранение данных в файл)?

Добавлено через 4 минуты
Открытие для чтения всегда проверяется:
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
void file_enter(Route *trais1, int *size_adress) 
{                                     
    int i;                           
    for(i=0; i<*size_adress; i++ )           
        if (!*trais1[i].start) break;
        else 
            continue;
    if (i==*size_adress)
    {
        cout <<"Список полон\n";
        return;
    }
    
    ifstream fin("MARSH.txt");
    if (!fin.is_open()) 
    {
        cout << "Файла не существует!" << endl;
        return;
    } 
    
    int j = i;
 
    while (!fin.eof() || (j <*size_adress))
    {
        
        fin.getline(trais1[j].start,50); 
        fin.getline(trais1[j].end,50);      
        fin >> trais1[j].number; 
        fin.ignore();
 
        j++;
    }
    fin.close();
    
    display(trais1, size_adress);
}
CAPTAIN_HURMA
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 00:56  [ТС]     Не получается считать информацию из фаила (описать структуру с именем MARSH) #9
Сохранение данных в фаил происходит.
Я так понял в 125 строке надо заменить j++ на fin.ignore(),так?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 01:01     Не получается считать информацию из фаила (описать структуру с именем MARSH) #10
Цитата Сообщение от CAPTAIN_HURMA Посмотреть сообщение
Сохранение данных в фаил происходит.
Я так понял в 125 строке надо заменить j++ на fin.ignore(),так?
Разве j++ в 125? cin.ignore() нужно замениять на fin.ignore().

Добавлено через 2 минуты
Насчёт номера строки прошу прощения. Я когда масштаб в браузере увеличиваю, то строчки с номерами меняются. 123 строка.
CAPTAIN_HURMA
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 01:09  [ТС]     Не получается считать информацию из фаила (описать структуру с именем MARSH) #11
Странно что у вас моя программа функционирует нормально.
Моя же после вышеперечисленных вами исправлений напрочь отказывается что делать после того как я выбираю в меню программы пункт "вывод данных из фаила".
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 01:13     Не получается считать информацию из фаила (описать структуру с именем MARSH) #12
Код выложите, который пробуете.
Или этот попробуйте:
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#include <iostream>
#include <cctype>
#include <cstring>
#include <iomanip>
#include <fstream>
#include <Windows.h>
 
using namespace std;
 
 
    struct Route
    {
        char start[50];
        char end[50];
        int number; 
    };
 
void enter(Route *trais1, int *size_adress) , init_list(Route *trais1, int *size_adress);
void search(Route *trais1, int *size_adress) , Choose_delete(Route *trais1, int *size_adress);
void display(Route *trais1, int *size_adress), file_enter(Route *trais1, int *size_adress);
void Save_file(Route *trais1, int *size_adress);
int menu();
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char choice;
    cout << "Введите размерность массива " << endl;
    int size;
    cin >> size;
    Route *trais = new Route[size];
    init_list(trais, &size);
    for(int i = 1;i>0;i=i+0)
    {
        choice = menu();
        switch ( choice )
        {
        case 'а' : enter(trais, &size);          
            break;                  
        case 'б' : file_enter(trais, &size);               
            break;      
        case 'в' : Save_file (trais, &size);
            break;
        case 'г' : display(trais, &size);                               
            break;                                               
        case 'д' : search(trais, &size);                                  
            break;                                         
        case 'е' : Choose_delete(trais, &size);                      
            break;                                       
        case 'ж' : return 0;                                     
        }                            
    }
}
void init_list(Route *trais1, int *size_adress)
{
    int i;
    for( i = 0; i<*size_adress; i++) 
        *trais1[i].start = '\0';                             
}   
int menu()
{
    char ch;
    cout << endl ;
    do 
    { 
      cout<<"--------------------------------------\n";
      cout<<"|   (А)-|-Ввод_ручной                |\n";
      cout<<"|   (Б)-|-Вывод_данных_из_файла      |\n";
      cout<<"|   (В)-|-Сохранение_данных_в_файл   |\n";
      cout<<"|   (Г)-|-Просмотр_всех_данных       |\n";
      cout<<"|   (Д)-|-Поиск_по_номеру_поезда     |\n";
      cout<<"|   (Е)-|-Удаление_данных            |\n";
      cout<<"|   (Ж)-|-Выход                      |\n";
      cout<<"--------------------------------------\n";
      cout << "Выберите команду: "; cin >> ch;
      cin.ignore();
    } while (!strchr("абвгдеж", tolower(ch)));                            
    return tolower(ch);
}
void enter(Route *trais1, int *size_adress) 
{
    int i;
    for(i=0; i<*size_adress; i++ )
        if (!*trais1[i].start)
            break;  
        else 
            continue;
    if (i==*size_adress)                                              
    {                                             
        cout <<"Список полон \n";
        return;
    }
        cout << "Введите начальный пункт " << endl;
        cin.getline  ( trais1[i].start,50) ;
        cout << "Введите конечный пункт " << endl;
        cin.getline ( trais1[i].end,50);
        cout << "Введите номер " << endl;
        cin >>trais1[i].number;
        cin.ignore();
}
 
void file_enter(Route *trais1, int *size_adress) 
{                                     
    int i;                           
    for(i=0; i<*size_adress; i++ )           
        if (!*trais1[i].start) break;
        else 
            continue;
    if (i==*size_adress)
    {
        cout <<"Список полон\n";
        return;
    }
    
    ifstream fin("MARSH.txt");
    if (!fin.is_open()) 
    {
        cout << "Файла не существует!" << endl;
        return;
    } 
    
    int j = i;
 
    while (!fin.eof() || (j <*size_adress))
    {
        
        fin.getline(trais1[j].start,50); 
        fin.getline(trais1[j].end,50);      
        fin >> trais1[j].number; 
        fin.ignore();
 
        j++;
    }
    fin.close();
    
    display(trais1, size_adress);
}
 
void Save_file(Route *trais1, int *size_adress)
{
    ofstream put;
    put.open("MARSH.txt");
    for(int i=0; i<*size_adress; i++ )
        if (*trais1[i].start)            
            put<<trais1[i].start<<"\n"<<trais1[i].end  << 
            "\n" << trais1[i].number << "\n";
    put.close();
}
void Choose_delete(Route *trais1, int *size_adress)
{
    int deletenumber;
    cout<<"Введите данные (Номер поезда) для удаления: " << endl;
    cin >> deletenumber;
    for (int i = 0; i<*size_adress; i++ )
    {
        if ( deletenumber == trais1[i].number)                                       
        *trais1[i].start = '\0';                     
    }
}
void search(Route *trais1, int *size_adress)
{
    char station[50];
    cout<<"Пожалуйста,введите название пункта:";
    cin.getline (station,50);
    bool net_marsh = true;
    for(int i = 0; i < *size_adress; i++)
    {
        if(((strcmp(trais1[i].start,station) == 0) || (strcmp(trais1[i].end,station) == 0)))
        {
            cout <<" n= "<<trais1[i].number<<" Из= "<<trais1[i].start<<" в= "<<trais1[i].end<<endl;
            net_marsh = false;
        }
    }
    if ( net_marsh)
        cout << "Этот пункт не существует \n";
}
void display(Route *trais1, int *size_adress)
{
    for(int i = 0; i < *size_adress-1; i++)
    {
        int min = i;
        for(int j = i+1; j < *size_adress; j++)
            if (trais1[j].number < trais1[min].number )
                min = j;
        Route a = trais1[min];
        trais1[min] = trais1[i];
        trais1[i] = a;
    }
    cout << "==========================================="<<endl;
    for(int i = 0; i < *size_adress; i++)
    if (*trais1[i].start)
        cout <<" n= "<<trais1[i].number<<" Из= "<<trais1[i].start<<" в= "<<trais1[i].end<<endl;
    cout << "==========================================="<<endl;
}
CAPTAIN_HURMA
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 01:16  [ТС]     Не получается считать информацию из фаила (описать структуру с именем MARSH) #13
Пожалуйста:
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#include <iostream>
#include <cctype>
#include <cstring>
#include <iomanip>
#include <fstream>
#include <Windows.h>
 
using namespace std;
 
 
    struct Route
    {
        char start[50];
        char end[50];
        int number; 
    };
 
void enter(Route *trais1, int *size_adress) , init_list(Route *trais1, int *size_adress);
void search(Route *trais1, int *size_adress) , Choose_delete(Route *trais1, int *size_adress);
void display(Route *trais1, int *size_adress), file_enter(Route *trais1, int *size_adress);
void Save_file(Route *trais1, int *size_adress);
int menu();
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char choice;
    cout << "Введите размерность массива " << endl;
    int size;
    cin >> size;
    Route *trais = new Route[size];
    init_list(trais, &size);
    for(int i = 1;i>0;i=i+0)
    {
        choice = menu();
        switch ( choice )
        {
        case 'а' : enter(trais, &size);          
            break;                  
        case 'б' : file_enter(trais, &size);               
            break;      
        case 'в' : Save_file (trais, &size);
            break;
        case 'г' : display(trais, &size);                               
            break;                                               
        case 'д' : search(trais, &size);                                  
            break;                                         
        case 'е' : Choose_delete(trais, &size);                      
            break;                                       
        case 'ж' : return 0;                                     
        }                            
    }
}
void init_list(Route *trais1, int *size_adress)
{
    int i;
    for( i = 0; i<*size_adress; i++) 
        *trais1[i].start = '\0';                             
}   
int menu()
{
    char ch;
    cout << endl ;
    do 
    { 
      cout<<"--------------------------------------\n";
      cout<<"|   (А)-|-Ввод_ручной                |\n";
      cout<<"|   (Б)-|-Вывод_данных_из_файла      |\n";
      cout<<"|   (В)-|-Сохранение_данных_в_файл   |\n";
      cout<<"|   (Г)-|-Просмотр_всех_данных       |\n";
      cout<<"|   (Д)-|-Поиск_по_номеру_поезда     |\n";
      cout<<"|   (Е)-|-Удаление_данных            |\n";
      cout<<"|   (Ж)-|-Выход                      |\n";
      cout<<"--------------------------------------\n";
      cout << "Выберите команду: "; cin >> ch;
      cin.ignore();
    } while (!strchr("абвгдеж", tolower(ch)));                            
    return tolower(ch);
}
void enter(Route *trais1, int *size_adress) 
{
    int i;
    for(i=0; i<*size_adress; i++ )
        if (!*trais1[i].start)
            break;  
        else 
            continue;
    if (i==*size_adress)                                              
    {                                             
        cout <<"Список полон \n";
        return;
    }
        cout << "Введите начальный пункт " << endl;
        cin.getline  ( trais1[i].start,50) ;
        cout << "Введите конечный пункт " << endl;
        cin.getline ( trais1[i].end,50);
        cout << "Введите номер " << endl;
        cin >>trais1[i].number;
        cin.ignore();
}
void file_enter(Route *trais1, int *size_adress) 
{                                     
    int i;                           
    for(i=0; i<*size_adress; i++ )           
        if (!*trais1[i].start) break;
        else 
            continue;
    if (i==*size_adress)
    {
        cout <<"Список полон\n";
        return;
    }
    
    ifstream fin("MARSH.txt");
    if (!fin.is_open()) 
    {
        cout << "Файла не существует!" << endl;
        return;
    } 
    
    int j = i;
 
    while (!fin.eof() || (j <*size_adress))
    {
        
        fin.getline(trais1[j].start,50); 
        fin.getline(trais1[j].end,50);      
        fin >> trais1[j].number; 
        fin.ignore();
 
        j++;
    }
    fin.close();
    
    display(trais1, size_adress);
}
void Save_file(Route *trais1, int *size_adress)
{
    ofstream put;
    put.open("MARSH.txt");
    for(int i=0; i<*size_adress; i++ )
        if (*trais1[i].start)            
            put<<trais1[i].start<<"\n"<<trais1[i].end  << 
            "\n" << trais1[i].number << "\n";
    put.close();
}
void Choose_delete(Route *trais1, int *size_adress)
{
    int deletenumber;
    cout<<"Введите данные (Номер поезда) для удаления: " << endl;
    cin >> deletenumber;
    for (int i = 0; i<*size_adress; i++ )
    {
        if ( deletenumber == trais1[i].number)                                       
        *trais1[i].start = '\0';                     
    }
}
void search(Route *trais1, int *size_adress)
{
    char station[50];
    cout<<"Пожалуйста,введите название пункта:";
    cin.getline (station,50);
    bool net_marsh = true;
    for(int i = 0; i < *size_adress; i++)
    {
        if(((strcmp(trais1[i].start,station) == 0) || (strcmp(trais1[i].end,station) == 0)))
        {
            cout <<" n= "<<trais1[i].number<<" Из= "<<trais1[i].start<<" в= "<<trais1[i].end<<endl;
            net_marsh = false;
        }
    }
    if ( net_marsh)
        cout << "Этот пункт не существует \n";
}
void display(Route *trais1, int *size_adress)
{
    for(int i = 0; i < *size_adress-1; i++)
    {
        int min = i;
        for(int j = i+1; j < *size_adress; j++)
            if (trais1[j].number < trais1[min].number )
                min = j;
        Route a = trais1[min];
        trais1[min] = trais1[i];
        trais1[i] = a;
    }
    cout << "==========================================="<<endl;
    for(int i = 0; i < *size_adress; i++)
    if (*trais1[i].start)
        cout <<" n= "<<trais1[i].number<<" Из= "<<trais1[i].start<<" в= "<<trais1[i].end<<endl;
    cout << "==========================================="<<endl;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 01:33     Не получается считать информацию из фаила (описать структуру с именем MARSH) #14
Этот код работает. У вас то что он выдаёт? В чем неработа проявляется?
CAPTAIN_HURMA
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 01:47  [ТС]     Не получается считать информацию из фаила (описать структуру с именем MARSH) #15
Неработа проявляется в том что после ввода команды: "б"
у меня не выводится на экран ни содержимое фаила,ни даже меню,после ввода команды "б" ничего далее не происходит,ничто не выводится и ничего ввести нельзя.
На экране всё ровно то что и было на той картинке что я кидал вам раньше(сейчас я эту картинку кинуть вам почему то не могу,но она такая же как и та что была прежде)
Мистика какая то.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 02:00     Не получается считать информацию из фаила (описать структуру с именем MARSH) #16
У меня так происходит, если не заменить cin.ignore() на fin.ignore(), и это понятно. Среда какая? Если очистить проект и перестроить?

Добавлено через 5 минут
В файле сколько записей? Размерность массива какую вводите?

Добавлено через 2 минуты
А лучше файл выложите, с которым пробуете.
CAPTAIN_HURMA
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 02:09  [ТС]     Не получается считать информацию из фаила (описать структуру с именем MARSH) #17
Всё,престроил,заработало как надо,спасибо большущее))
только вот маршрут я ввел один,а вывел мне он из фаила на экран этот маршрут аж в двойном экземпляре "хотя в файле маршрут только лишь один".
Миниатюры
Не получается считать информацию из фаила (описать структуру с именем MARSH)  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2013, 13:54     Не получается считать информацию из фаила (описать структуру с именем MARSH)
Еще ссылки по теме:

Описать структуру с именем TRAIN C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 13:54     Не получается считать информацию из фаила (описать структуру с именем MARSH) #18
Работает так:
1) при выводе из файла (б), на экран выводятся только те маршруты, что в файле (не в массиве), но в массив помещаются все маршруты из файла, за исключением тех, которые уже есть в массиве. Данные из файла выводятся как есть, без сортировки.
2) для просмотра всех отсортированных данных в массиве - г.

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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
#include <iostream>
#include <cctype>
#include <cstring>
#include <iomanip>
#include <fstream>
#include <Windows.h>
 
using namespace std;
 
 
struct Route
{
    char start[50];
    char end[50];
    int number; 
};
 
void enter(Route *trais1, const int *size_adress) , init_list(Route *trais1, const int *size_adress);
void search(Route *trais1, const int *size_adress) , Choose_delete(Route *trais1, const int *size_adress);
void display(Route *trais1, const int *size_adress), file_enter(Route *trais1, const int *size_adress);
void Save_file(Route *trais1, const int *size_adress);
 
int menu();
bool finde_route(Route *trais1, Route &route, const int *size_adress); // поиск в массиве маршрута route
 
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char choice;
    cout << "Введите размерность массива " << endl;
   
    int size;
    cin >> size;
    Route *trais = new Route[size];
    init_list(trais, &size);
    for(int i = 1;i>0;i=i+0)
    {
        choice = menu();
        switch ( choice )
        {
        case 'а' : enter(trais, &size);          
            break;                  
        case 'б' : file_enter(trais, &size);               
            break;      
        case 'в' : Save_file (trais, &size);
            break;
        case 'г' : display(trais, &size);                               
            break;                                               
        case 'д' : search(trais, &size);                                  
            break;                                         
        case 'е' : Choose_delete(trais, &size);                      
            break;                                       
        case 'ж' : return 0;                                     
        }                            
    }
}
 
void init_list(Route *trais1, const int *size_adress)
{
    int i;
    for( i = 0; i<*size_adress; i++) 
        *trais1[i].start = '\0';                             
}   
 
int menu()
{
    char ch;
    cout << endl ;
    do 
    { 
      cout<<"--------------------------------------\n";
      cout<<"|   (А)-|-Ввод_ручной                |\n";
      cout<<"|   (Б)-|-Вывод_данных_из_файла      |\n";
      cout<<"|   (В)-|-Сохранение_данных_в_файл   |\n";
      cout<<"|   (Г)-|-Просмотр_всех_данных       |\n";
      cout<<"|   (Д)-|-Поиск_по_номеру_поезда     |\n";
      cout<<"|   (Е)-|-Удаление_данных            |\n";
      cout<<"|   (Ж)-|-Выход                      |\n";
      cout<<"--------------------------------------\n";
      cout << "Выберите команду: "; cin >> ch;
      cin.ignore();
    } while (!strchr("абвгдеж", tolower(ch)));                            
    return tolower(ch);
}
 
void enter(Route *trais1, const int *size_adress) 
{
    int i;
    for(i=0; i<*size_adress; i++ )
        if (!*trais1[i].start)
            break;  
        else 
            continue;
    if (i==*size_adress)                                              
    {                                             
        cout <<"Список полон \n";
        return;
    }
        cout << "Введите начальный пункт " << endl;
        cin.getline  ( trais1[i].start,50) ;
        cout << "Введите конечный пункт " << endl;
        cin.getline ( trais1[i].end,50);
        cout << "Введите номер " << endl;
        cin >>trais1[i].number;
        cin.ignore();
}
 
// поиск в массиве маршрута route
bool finde_route(Route *trais1, Route &route, const int *size_adress)
{
    for (int i = 0; i < *size_adress && trais1[i].start != '\0'; ++i)
    {
        if (!strcmp(trais1[i].start, route.start) &&
            !strcmp(trais1[i].end, route.end) &&
            trais1[i].number == route.number) return true; // если найден
    }
    return false;
}
 
void file_enter(Route *trais1, const int *size_adress) 
{                                     
    int i;                           
    for(i=0; i<*size_adress; i++ )           
        if (!*trais1[i].start) break;
        else 
            continue;
    if (i==*size_adress)
    {
        cout <<"Список полон\n";
        return;
    }
    
    ifstream fin("MARSH.txt");
    if (!fin.is_open()) 
    {
        cout << "Файла не существует!" << endl;
        return;
    } 
    
    int j = i;
    
    cout << "==========================================="<<endl;
    while (true)
    {
        Route temp;
        fin.getline(temp.start,50);
        if (fin.eof() || j == *size_adress) break; 
        fin.getline(temp.end,50);      
        fin >> temp.number; 
        fin.ignore();
        cout <<" n= " << temp.number << " Из= " << temp.start << " в= "<<temp.end << endl;
        if (finde_route(trais1, temp, size_adress)) continue;
        
        strcpy(trais1[j].start, temp.start);
        strcpy(trais1[j].end, temp.end);      
        trais1[j].number = temp.number;
 
        j++;
    }
    cout << "==========================================="<<endl;
    if (!fin.eof()) cout << "Не все мршруты из файла считаны. \nНедостаточный размер массива!" << endl;
    fin.close();
    
    //display(trais1, size_adress);
}
 
void Save_file(Route *trais1, const int *size_adress)
{
    ofstream put;
    put.open("MARSH.txt");
    for(int i=0; i<*size_adress; i++ )
        if (*trais1[i].start)            
            put<<trais1[i].start<<"\n"<<trais1[i].end  << 
            "\n" << trais1[i].number << "\n";
    put.close();
}
 
void Choose_delete(Route *trais1, const int *size_adress)
{
    int deletenumber;
    cout<<"Введите данные (Номер поезда) для удаления: " << endl;
    cin >> deletenumber;
    for (int i = 0; i<*size_adress; i++ )
    {
        if ( deletenumber == trais1[i].number)                                       
        *trais1[i].start = '\0';                     
    }
}
 
void search(Route *trais1, const int *size_adress)
{
    char station[50];
    cout<<"Пожалуйста,введите название пункта:";
    cin.getline (station,50);
    bool net_marsh = true;
    for(int i = 0; i < *size_adress; i++)
    {
        if(((strcmp(trais1[i].start, station) == 0) || (strcmp(trais1[i].end, station) == 0)))
        {
            cout <<" n= "<<trais1[i].number<<" Из= "<<trais1[i].start<<" в= "<<trais1[i].end<<endl;
            net_marsh = false;
        }
    }
    if ( net_marsh)
        cout << "Этот пункт не существует \n";
}
 
void display(Route *trais1, const int *size_adress)
{
    for(int i = 0; i < *size_adress-1; i++)
    {
        int min = i;
        for(int j = i+1; j < *size_adress; j++)
            if (trais1[j].number < trais1[min].number )
                min = j;
        Route a = trais1[min];
        trais1[min] = trais1[i];
        trais1[i] = a;
    }
    cout << "==========================================="<<endl;
    for(int i = 0; i < *size_adress; i++)
    if (*trais1[i].start)
        cout <<" n= "<<trais1[i].number<<" Из= "<<trais1[i].start<<" в= "<<trais1[i].end<<endl;
    cout << "==========================================="<<endl;
}
Yandex
Объявления
30.05.2013, 13:54     Не получается считать информацию из фаила (описать структуру с именем MARSH)
Ответ Создать тему

Метки
marsh, marsh c++, описать структуру, описать структуру c++, описать структуру marsh c++, описать структуру marsh, описать структуру с именем marsh, описать структуру с именем marsh c++, структура marsh, структура marsh c++, структуры данных, структуры данных c++
Опции темы

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