Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
1

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

29.05.2013, 22:36. Показов 1267. Ответов 17

Не получается считать информацию из файла.
Все остальные действия программы кроме считывания информации из файла работают нормально.
Ошибка кроется между 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2013, 22:36
Ответы с готовыми решениями:

Описать структуру с именем MARSH
Описать структуру с именем MARSH, содержащую следующие поля: • название начального пункта...

Описать структуру с именем MARSH
- Описать структуру с именем MARSH, содержащую следующие поля: название начального пункта...

Описать структуру с именем MARSH
2. Описать структуру с именем MARSH, содержащую следующие поля: - название начального пункта...

Описать структуру с именем MARSH
1. Описать структуру с именем MARSH, содержащую следующие поля: ■ название начального...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
17
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 00:01 2
125
C++
1
fin.ignore();
0
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 00:28  [ТС] 3
К сожалению это не исправляет проблему.
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 00:36 4
Цитата Сообщение от CAPTAIN_HURMA Посмотреть сообщение
К сожалению это не исправляет проблему.
Что конкретно не работает? Как это выглядит?
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 00:39 5
У меня информация из файла считывается.
0
Миниатюры
Не получается считать информацию из фаила (описать структуру с именем MARSH)  
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 00:45 6
Если нужно сразу вывести на экран то, что считалось из файла, то добавьте в конце file_enter():
C++
1
display(trais1, size_adress);
Тогда будет так работать.
0
Миниатюры
Не получается считать информацию из фаила (описать структуру с именем MARSH)  
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 00:46  [ТС] 7
Ого,круто,завидую)
У меня это всё выглядит вот так,даже не получается уйти дальше выбора меню "Вывод_данных_из_фаила".
Извини,ты не мог бы целиком кинуть этот волшебный код с помощью которого у тебя получилось считать данные с фаила?Просто я видать уже в конец запутался.
0
Миниатюры
Не получается считать информацию из фаила (описать структуру с именем MARSH)  
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 00:55 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);
}
0
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 00:56  [ТС] 9
Сохранение данных в фаил происходит.
Я так понял в 125 строке надо заменить j++ на fin.ignore(),так?
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 01:01 10
Цитата Сообщение от CAPTAIN_HURMA Посмотреть сообщение
Сохранение данных в фаил происходит.
Я так понял в 125 строке надо заменить j++ на fin.ignore(),так?
Разве j++ в 125? cin.ignore() нужно замениять на fin.ignore().

Добавлено через 2 минуты
Насчёт номера строки прошу прощения. Я когда масштаб в браузере увеличиваю, то строчки с номерами меняются. 123 строка.
0
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 01:09  [ТС] 11
Странно что у вас моя программа функционирует нормально.
Моя же после вышеперечисленных вами исправлений напрочь отказывается что делать после того как я выбираю в меню программы пункт "вывод данных из фаила".
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 01:13 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;
}
0
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 01:16  [ТС] 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;
}
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 01:33 14
Этот код работает. У вас то что он выдаёт? В чем неработа проявляется?
0
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 01:47  [ТС] 15
Неработа проявляется в том что после ввода команды: "б"
у меня не выводится на экран ни содержимое фаила,ни даже меню,после ввода команды "б" ничего далее не происходит,ничто не выводится и ничего ввести нельзя.
На экране всё ровно то что и было на той картинке что я кидал вам раньше(сейчас я эту картинку кинуть вам почему то не могу,но она такая же как и та что была прежде)
Мистика какая то.
0
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 02:00 16
У меня так происходит, если не заменить cin.ignore() на fin.ignore(), и это понятно. Среда какая? Если очистить проект и перестроить?

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

Добавлено через 2 минуты
А лучше файл выложите, с которым пробуете.
1
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 12
30.05.2013, 02:09  [ТС] 17
Всё,престроил,заработало как надо,спасибо большущее))
только вот маршрут я ввел один,а вывел мне он из фаила на экран этот маршрут аж в двойном экземпляре "хотя в файле маршрут только лишь один".
0
Миниатюры
Не получается считать информацию из фаила (описать структуру с именем MARSH)  
5479 / 4874 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 13:54 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;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2013, 13:54

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Описать структуру с именем MARSH
Описать структуру с именем MARSH, содержащую следующие поля: BEGST — название начального пункта...

Разработать структуру с именем MARSH
Прошу помощи в задании. Разработать структуру с именем MARSH, содержащую поля: • Название...

Описать структуру с именем MARSH
Описать структуру с именем MARSH, содержащую следующие поля: • название начального пункта...

Описать структуру с именем MARSH
Описать структуру с именем MARSH содержащую следующие: поля назване начального пукта маршрута,...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.