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

Не читает первую строку из файла - C++

Восстановить пароль Регистрация
 
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
30.04.2013, 18:58     Не читает первую строку из файла #1
Собсвтенно идет чтение из файла в объект структуры, который потом пихается в стек. Чтобы его вывести таблицей, он сначала пихается в массив, там выводится, а потом из массива возвращается в стек. Но почему-то первая строка из файла не читается =( т.е. если в файле будет:
C++
1
2
3
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
То в стеке останется только
C++
1
2
2 2 2 2 2 2
3 3 3 3 3 3
Но если в файле написать так:
C++
1
2
3
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
То в стеке сохранится
C++
1
2
3
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 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
#include <iostream>
#include <string.h>
#include <fstream> //для работы с файлами
#include <stack> //Для стеков
#include <iomanip> //Для отображения таблицы с помощью потоков
 
using namespace std;
 
void Add();
void ShowAll();
void menu(char);
void Read();
void Clean();
 
struct Football{                //Структура
    string fio,legioner;
    int age,golls;
    double time,plata;
};
void MassReturn(Football*, int);
Football* MassSave();
Football op;
stack <Football> Stek;
int main()
{
string num;
 
        /*Менюшка :3*/
     while(num[0]!='0') // Бесконечный цикл
  {
    cout<<"1 - Read from file"<<endl;
    cout<<"2 - Add element"<<endl;
    cout<<"3 - Delete element"<<endl;
    cout<<"4 - Show 1 element"<<endl;
    cout<<"5 - Show all elements"<<endl;
    cout<<"6 - Sorting"<<endl;
    cout<<"7 - Individual task"<<endl;
    cout<<"8 - Write to file"<<endl;
    cout<<"0 - Exit"<<endl;
    cout<<"Input number of menu: ";//Вывод приглашения на выбор элемента меню};
    getline(cin,num);//Ввод строки
    if(num.size()>1) cout<<"Comand not found, retype!"<<endl;//Проверка размера строки
    else menu(num[0]);//ункция выполнения поля меню
  }
  return 0;
}
void menu(char a)
{
    switch(a)
    {
     case '0': cout<<"Exit"<<endl;
        break;
     case '1': Read();
        break;
     case '2': Add();
        break;
 //    case '3': Del();
        break;
  //   case '4': ShowOne();
        break;
     case '5': ShowAll();
        break;
  //   case '6': Sorting();
        break;
 //    case '7': IndTask();
        break;
  //   case '8': Write();
        break;
      default:
        cout<<"Comand not found, retype!"<<endl;
        break;
    }
}
void Add()
{
        cout << "Vvedite familiu imya otchestvo: ";
        getline(cin,op.fio);
        cout << "Vozrast: ";
        cin >> op.age;
        cout << "Kollichestvo golov: ";
        cin >> op.golls;
        cout << "Vremya: ";
        cin >> op.time;
        cout << "Yavlyaentsya legionerom? (yes/no): ";
        getline(cin,op.legioner);
        cout << "Zar_plata: ";
        cin >> op.plata;
        cout << endl;
        Stek.push(op);            //добавление элемента в стек
}
void ShowAll()
{
    if(Stek.empty()) cout<<"Stack clear"<<endl; //Проверка на пустоту стека
    else{
    int size=Stek.size(),size2=size;
    Football *m=MassSave() ;  //Сохраняем таблицу во временном массиве
    int i=0;
    cout<<left<<setw(20)<<"FIO"<<setw(4)<<"Age"<<setw(6)<<"Golls"<<setw(10)<<"Legioner?"<<setw(5)<<"Time"<<setw(5)<<"Plata"<<endl;
    while(i!=size2)
        {
        cout <<left<<setw(20)<<m[i].fio<<setw(4)<<m[i].age<<setw(6)<<m[i].golls<<setw(10)<<m[i].legioner<<setw(5)<<m[i].time<<setw(5)<<m[i].plata<<endl;
        i++;
        }
        MassReturn(m,size2); //Возвращаем стек на место
        }
    }
//----------------------Функция "сохранения" стека-------------------------------------------------------------------
Football* MassSave()
{
    int size=Stek.size(),i=size-1;
    cout<<"Size= "<<size<<endl;
    Football *mass=new Football[size];
    while(!Stek.empty())
    {
    mass[i].fio=Stek.top().fio;
    mass[i].age=Stek.top().age;
    mass[i].golls=Stek.top().golls;
    mass[i].time=Stek.top().time;
    mass[i].legioner=Stek.top().legioner;
    mass[i].plata=Stek.top().plata;
    i--;Stek.pop();
    }
    return mass;
}
 
//----------------------Функция "перпрождения" стека------------------------------------------------------------------
void MassReturn(Football* m , int size)
{
    int i=0;
    cout<<"Size= "<<size<<endl;
    while(i!=size)
    {
    op.fio=m[i].fio;
    op.age=m[i].age;
    op.golls=m[i].golls;
    op.time=m[i].time;
    op.legioner=m[i].legioner;
    op.plata=m[i].plata;
    i++;Stek.push(op);
    }
    delete[] m;
}
void Read()
{
ifstream h("begin.txt");
if(h==NULL)cout<<"File myfile.txt don't open for read!"; //Проверка на то, открылся ли файл
  else{                     // Если открылся, то проверяет пустой ли файл
            string str;
             getline(h, str);
                if (h.eof() && str.empty())
                    {
                    cout<<"File clear"<<endl;
                          h.close();}
                else {
    Clean(); //Очистка стека перед записью
    while(!h.eof()) // цикл записи строки в объект и переход на новую, пока не дойдет до конца файла
    {
       h>>op.fio>>op.age>>op.golls>>op.legioner>>op.time>>op.plata;
       Stek.push(op); // Запись объекта в структуру
    }
h.close();}
    }
cout<<"Reading completed successfully"<<endl;
}
void Clean()
{
    while(!Stek.empty())Stek.pop();
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 18:58     Не читает первую строку из файла
Посмотрите здесь:

C++ удалить первую строку из файла
Матрицы: поменять местами первую строку и строку, содержащую максимальный элемент C++
Поменять местами первую строку и строку сумма элементов которой минимальна C++
C++ Функция fopen() для большого текстового файла читает только первую строку
C++ В матрице из целых чисел поменять местами первую строку и строку, содержащую самый большой по абсолютной величине элемент матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11823 / 6802 / 769
Регистрация: 27.09.2012
Сообщений: 16,870
Записей в блоге: 2
Завершенные тесты: 1
30.04.2013, 19:20     Не читает первую строку из файла #2
Как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Read()
{
ifstream h("begin.txt");
if(!h.is_open())
    cout<<"File myfile.txt don't open for read!"; //Проверка на то, открылся ли файл
  else{                     // Если открылся, то проверяет пустой ли файл
    Clean(); //Очистка стека перед записью
    while(!h.eof()) // цикл записи строки в объект и переход на новую, пока не дойдет до конца файла
    {
       h>>op.fio>>op.age>>op.golls>>op.legioner>>op.time>>op.plata;
         if(h.fail()){
             cout<<"Error."<<std::endl;
             break;
         }
       Stek.push(op); // Запись объекта в структуру
    }
h.close();
    }
cout<<"Reading completed successfully"<<endl;
}
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
30.04.2013, 21:27  [ТС]     Не читает первую строку из файла #3
Теперь вообще только 2-ю строчку записало

Я не понимаю что не так =(
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
30.04.2013, 22:26     Не читает первую строку из файла #4
ququ_smile,

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
#include <iostream>
#include <string>
#include <fstream> //для работы с файлами
#include <stack> //Для стеков
#include <iomanip> //Для отображения таблицы с помощью потоков
 
using namespace std;
 
void Add();
void ShowAll();
void menu(int);
void Read();
void Clean();
 
struct Football{                //Структура
    string fio,legioner;
    int age,golls;
    double time,plata;
};
void MassReturn(Football*, int);
Football* MassSave();
Football op;
stack <Football> Stek;
int main()
{
int num;
 
        /*Менюшка :3*/
     do // Бесконечный цикл
  {
    cout<<"1 - Read from file"<<endl;
    cout<<"2 - Add element"<<endl;
    cout<<"3 - Delete element"<<endl;
    cout<<"4 - Show 1 element"<<endl;
    cout<<"5 - Show all elements"<<endl;
    cout<<"6 - Sorting"<<endl;
    cout<<"7 - Individual task"<<endl;
    cout<<"8 - Write to file"<<endl;
    cout<<"0 - Exit"<<endl;
    cout<<"Input number of menu: ";//Вывод приглашения на выбор элемента меню};
    cin >> num;//Ввод строки
    menu(num);
  }while(num != 0);
  return 0;
}
void menu(int a)
{
    switch(a)
    {
     case 0: cout<<"Exit"<<endl;
        break;
     case 1: Read();
        break;
     case 2: Add();
        break;
 //    case '3': Del();
        break;
  //   case '4': ShowOne();
        break;
     case 5: ShowAll();
        break;
  //   case '6': Sorting();
        break;
 //    case '7': IndTask();
        break;
  //   case '8': Write();
        break;
      default:
        cout<<"Comand not found, retype!"<<endl;
        break;
    }
}
void Add()
{
        cout << "Vvedite familiu imya otchestvo: ";
        getline(cin,op.fio);
        cout << "Vozrast: ";
        cin >> op.age;
        cout << "Kollichestvo golov: ";
        cin >> op.golls;
        cout << "Vremya: ";
        cin >> op.time;
        cout << "Yavlyaentsya legionerom? (yes/no): ";
        getline(cin,op.legioner);
        cout << "Zar_plata: ";
        cin >> op.plata;
        cout << endl;
        Stek.push(op);            //добавление элемента в стек
}
void ShowAll()
{
    if(Stek.empty()) cout<<"Stack clear"<<endl; //Проверка на пустоту стека
    else{
    int size=Stek.size(),size2=size;
    Football *m=MassSave() ;  //Сохраняем таблицу во временном массиве
    int i=0;
    cout<<left<<setw(20)<<"FIO"<<setw(4)<<"Age"<<setw(6)<<"Golls"<<setw(10)<<"Legioner?"<<setw(5)<<"Time"<<setw(5)<<"Plata"<<endl;
    while(i!=size2)
        {
        cout <<left<<setw(20)<<m[i].fio<<setw(4)<<m[i].age<<setw(6)<<m[i].golls<<setw(10)<<m[i].legioner<<setw(5)<<m[i].time<<setw(5)<<m[i].plata<<endl;
        i++;
        }
        MassReturn(m,size2); //Возвращаем стек на место
        }
    }
//----------------------Функция "сохранения" стека-------------------------------------------------------------------
Football* MassSave()
{
    int size=Stek.size(),i=size-1;
    cout<<"Size= "<<size<<endl;
    Football *mass=new Football[size];
    while(!Stek.empty())
    {
    mass[i].fio=Stek.top().fio;
    mass[i].age=Stek.top().age;
    mass[i].golls=Stek.top().golls;
    mass[i].time=Stek.top().time;
    mass[i].legioner=Stek.top().legioner;
    mass[i].plata=Stek.top().plata;
    i--;Stek.pop();
    }
    return mass;
}
 
//----------------------Функция "перпрождения" стека------------------------------------------------------------------
void MassReturn(Football* m , int size)
{
    int i=0;
    cout<<"Size= "<<size<<endl;
    while(i!=size)
    {
    op.fio=m[i].fio;
    op.age=m[i].age;
    op.golls=m[i].golls;
    op.time=m[i].time;
    op.legioner=m[i].legioner;
    op.plata=m[i].plata;
    i++;Stek.push(op);
    }
    delete[] m;
}
void Read()
{
ifstream h("begin.txt");
if(h==NULL)cout<<"File myfile.txt don't open for read!"; //Проверка на то, открылся ли файл
  else{                     // Если открылся, то проверяет пустой ли файл
                if (h.eof())
                    {
                    cout<<"File clear"<<endl;
                          h.close();}
                else {
    Clean(); //Очистка стека перед записью
    while(!h.eof()) // цикл записи строки в объект и переход на новую, пока не дойдет до конца файла
    {
       h>>op.fio>>op.age>>op.golls>>op.legioner>>op.time>>op.plata;
         if(h.fail()){
             cout<<"Error."<<std::endl;
             break;
         }
       Stek.push(op); // Запись объекта в структуру
    }
h.close();}
    }
cout<<"Reading completed successfully"<<endl;
}
void Clean()
{
    while(!Stek.empty())Stek.pop();
 
}
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
01.05.2013, 03:17  [ТС]     Не читает первую строку из файла #5
Спасибо, работает! Но в чем была проблема? Я вижу вы убрали проверку на то, чист ли файл.Так записывало из-за этой проверки, которая связана со строками?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 09:19     Не читает первую строку из файла #6
ququ_smile, вы считывали из файла первую строку в str, вот она и не выводилась так как была уже считана)
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
01.05.2013, 09:39  [ТС]     Не читает первую строку из файла #7
Ну результат доказывает ваши слова, но я же после проверки закрывал файл и открывал его заново.Разве не должно было быть чтение опять сначала ?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 09:45     Не читает первую строку из файла #8
ququ_smile, должно было быть, но я не вижу где вы заново открывали файл вы считали str для проверки на пустоту, но потом файл закрываете если он пуст, иначе вы ничего не делаете и продолжаете получать данные из открытого файла
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
01.05.2013, 09:50  [ТС]     Не читает первую строку из файла #9
Блин точно =( Плохо получается, когда в голове одно, а написано другое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2013, 09:57     Не читает первую строку из файла
Еще ссылки по теме:

C++ В матрице из действительных чисел поменять местами первую строку и строку, содержащую наименьший элемент матрицы
C++ Ifstream читает из файла только первую запись, вылетает
C++ В первую строку выходного файла выведите ровно N различных целых чисел

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

Или воспользуйтесь поиском по форуму:
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 09:57     Не читает первую строку из файла #10
ququ_smile,
Yandex
Объявления
01.05.2013, 09:57     Не читает первую строку из файла
Ответ Создать тему
Опции темы

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