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

Читать структуру из файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
WoodyArt
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 14
19.12.2009, 22:22     Читать структуру из файла #1
необходимо вывести на экран информацию о рейсах.

Структура данных: рейс, пункт назначения, время вылета, время прибытия, стоимость билетов, количество билетов.

001 San Francisco 500 14:30 18:55 17
002 Moscow 240 11:45 12:30 3

Компилятор говорит что showFligth was undeclared. Правильный ли у меня вообще подход? Или это делается как-то по другому?

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
#include <iostream>
#include <fstream>
 
using namespace std;
 
int menu();
 
void showFligth();    //функция читает из файла информацию о рейсах
 
int main()
{
    bool exit = false;
 
    for (;;)
    {
        int choice = menu();
        switch(choice)
        {
            case (1):
                showFligh();
                break;
            case (2):
                break;//пока не надо
            case (3):
                exit=true;
                break;
            default:
                cout << " Please select again!\n";
                break;
        }   //конец цикла switch
 
        if (exit)
            break;
    }       //конец цикла for
    return 0;
}
 
/*-----------МЕНЮ--------*/
 
int menu()
{
    int choise;
 
    cout << "***Главное меню***\n\n\n";
    cout << "1 - Посмотреть информацию о рейсах\n";
    cout << "2 - Подробная информация о рейсе\n";
    cout << "3 - Выход\n\n";
    cout << ":";
        cin >> choise;
        return choise;
}
 
/*-----------БИЛЕТ--------*/
 
struct ticket
{
    int Flight;                //номер рейса
    char Dest[50];         //назначение
    int Cost;                 //цена билета
    char DepDate[10];   //время вылета
    char ArrDate[10];    //время прибытия
    int Num;                //количество билетов
}
 
/*------ТАБЛО------*/
 
void showFlight()
{
    ifstream in("base.txt");
    if(!in) {
        cout << "Не могу открыть файл.\n";
        return 1;
    }
 
    while(in) { //in будет false, когда достигнут EOF
        in.get(ticket.Flight);
        if(in){
        cout << ticket.Flight;
        cout << ticket.Dest;}
    }
 
    in.close();
 
    return 0;
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
19.12.2009, 22:44     Читать структуру из файла #2
void не возвращает значений
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void showFlight()
{
    ifstream in("base.txt");
    if(!in) {
        cout << "Не могу открыть файл.\n";
        return;
    }
 
    while(in) { //in будет false, когда достигнут EOF
        in.get(ticket.Flight);
        if(in){
        cout << ticket.Flight;
        cout << ticket.Dest;}
    }
 
    in.close();
}
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.12.2009, 03:20     Читать структуру из файла #3
Цитата Сообщение от WoodyArt
Компилятор говорит что showFligth was undeclared
надо все названия этой функции привести к виду showFlight
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
20.12.2009, 09:06     Читать структуру из файла #4
попробуйте переписать это
C++
1
2
3
4
5
6
while(in) { //in будет false, когда достигнут EOF
        in.get(ticket.Flight);
        if(in){
        cout << ticket.Flight;
        cout << ticket.Dest;}
    }
на это
C++
1
2
3
4
5
6
freopen("base.txt","r",stdin); // прявязка к стандартному потоку ввода
    ticket in;
    while(cin >> in) { //in будет false, когда достигнут EOF
        cout << in.Flight;
        cout << in.Dest;
    }
лично я привязал бы входной файл к стандартному потоку ввода..
WoodyArt
0 / 0 / 0
Регистрация: 19.12.2009
Сообщений: 14
22.12.2009, 22:49  [ТС]     Читать структуру из файла #5
Теперь ругается на error: no match for ‘operator>>’ in ‘std::cin >> in’|.

Компилятор - g++, IDE - Code::Blocks может в нём дело? Или я где-то сделал грамматическую ошибку?

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
#include <iostream>
#include <fstream>
 
using namespace std;
 
int menu();
 
void showFlight();    //функция читает читает из файла инфо о рейсах
 
int main()
{
    bool exit = false;
 
    for (;;)
    {
        int choice = menu();
        switch(choice)
        {
            case (1):
                showFlight();
                break;
            case (2):
                //показать всю инфу
                break;
            case (3):
                exit=true;
                break;
            default:
                cout << " Please select again!\n";
                break;
        }   //конец цикла switch
 
        if (exit)
            break;
    }       //конец цикла for
    return 0;
}
 
/*-----------МЕНЮ--------*/
 
int menu()
{
    int choice;
 
    cout << "***Главное меню***\n\n\n";
    cout << "1 - Посмотреть информацию о рейсах\n";
    cout << "2 - Подробная информация о рейсе\n";
    cout << "3 - Выход\n\n";
    cout << ":";
        cin >> choice;
        return choice;
}
 
/*-----------БИЛЕТ--------*/
 
struct ticket
{
    int Flight;         //номер рейса
    char Dest[50];      //назначение
    int Cost;           //цена билета
    char DepDate[10];   //время вылета
    char ArrDate[10];   //время прибытия
    int Num;            //количество билетов
};
 
/*------ТАБЛО------*/
 
void showFlight()
{
    freopen("base.txt","r",stdin); // прявязка к стандартному потоку ввода
    ticket in;
    while(cin >> in) { //in будет false, когда достигнут EOF //error: no match for ‘operator>>’ in ‘std::cin >> in’|
        cout << in.Flight;
        cout << in.Dest;
    }
    in.close();
}
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
22.12.2009, 23:42     Читать структуру из файла #6
Хд...что вы писали когда объявляли функцию?А в кэйсах что написалиОрфографическая ошибка
Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
23.12.2009, 00:36     Читать структуру из файла #7
outoftime,

он возвращает... пустоту. :eek:

void a() {}
void b() { return a(); }
int main() { b(); return 0; }

http://codepad.org/sRAKVglu
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.12.2009, 00:44     Читать структуру из файла #8
Цитата Сообщение от WoodyArt
Теперь ругается на error: no match for ‘operator>>’ in ‘std::cin >> in’|.
C++
1
ticket in;
C++
1
while(cin >> in.Flight && cin >> in.dest ...)
Добавлено через 2 минуты
насчёт привязки, лучше всё-таки файл открыть просто, потому что после привязки нужно будет делать отвязку, но самое главное - могут обе штуки понадобиться (и файл и stdin)
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
23.12.2009, 06:35     Читать структуру из файла #9
короче надо чтобы лог оператор вернул значение раньше того, как вы юзаете вывод, проще говоря возьмите выражение в скобки, для функций также, если вы хотите вывести результат работы функции нуждно взять ее вызов в кавычки, что сначала вычислить значение а потом уже выводить на екран

Добавлено через 1 минуту
C++
1
while(cin >> (in.Flight && cin) >> (in.dest) ...)
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.12.2009, 10:53     Читать структуру из файла #10
логический оператор выполняет свои операнды последовательно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
#include <iostream>
 
using namespace std;
 
int main(void)
{
    struct {
        int a;
        double b;
        string c;
    } s;
    
    while (cin >> s.a && cin >> s.b && cin >> s.c)
        cout << s.a << " " << s.b << " " << s.c << endl;
        
    return 0;
}

Код
[guest@station tmp]$ g++ t.cpp -o t
[guest@station tmp]$ echo -e "1 2.2 abc \n 2 0.3 ab \n 1 2.2 \n" | ./t
1 2.2 abc
2 0.3 ab
[guest@station tmp]$
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2009, 15:11     Читать структуру из файла
Еще ссылки по теме:

как читать из файла строки и числа C++
C++ Как читать с файла каждую строку как структуру
C++ Читать из файла число и определить их максимум

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

Или воспользуйтесь поиском по форуму:
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
23.12.2009, 15:11     Читать структуру из файла #11
да.. сюдя по тому что я написал уже поздно было))
Yandex
Объявления
23.12.2009, 15:11     Читать структуру из файла
Ответ Создать тему
Опции темы

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