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

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

30.04.2013, 18:58. Просмотров 1345. Ответов 9
Метки нет (Все метки)

Собсвтенно идет чтение из файла в объект структуры, который потом пихается в стек. Чтобы его вывести таблицей, он сначала пихается в массив, там выводится, а потом из массива возвращается в стек. Но почему-то первая строка из файла не читается =( т.е. если в файле будет:
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();
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2013, 18:58
Ответы с готовыми решениями:

Функция fopen() для большого текстового файла читает только первую строку
Есть текстовой файл 4.5 мб, нужно его открыть для чтения из него строк. FILE *f =...

Не читает первую строку
Написал код для чтения файла и вывода содержимого &lt;?php if (isset( $_GET )) $dir =...

читает только первую строку,а остальные нет
из файла считывается только одна строка,а остальные нет...что надо сделать?

Ifstream читает из файла только первую запись, вылетает
ifstream читает из файла только первую запись, вылетает при попытке вытащить из файла данные,...

9
Грамотный. Безпорно.
16622 / 9662 / 1863
Регистрация: 27.09.2012
Сообщений: 23,966
Записей в блоге: 2
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;
}
1
1 / 1 / 3
Регистрация: 28.01.2013
Сообщений: 169
30.04.2013, 21:27  [ТС] 3
Теперь вообще только 2-ю строчку записало

Я не понимаю что не так =(
0
380 / 351 / 113
Регистрация: 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();
 
}
1
1 / 1 / 3
Регистрация: 28.01.2013
Сообщений: 169
01.05.2013, 03:17  [ТС] 5
Спасибо, работает! Но в чем была проблема? Я вижу вы убрали проверку на то, чист ли файл.Так записывало из-за этой проверки, которая связана со строками?
0
380 / 351 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 09:19 6
ququ_smile, вы считывали из файла первую строку в str, вот она и не выводилась так как была уже считана)
0
1 / 1 / 3
Регистрация: 28.01.2013
Сообщений: 169
01.05.2013, 09:39  [ТС] 7
Ну результат доказывает ваши слова, но я же после проверки закрывал файл и открывал его заново.Разве не должно было быть чтение опять сначала ?
0
380 / 351 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 09:45 8
ququ_smile, должно было быть, но я не вижу где вы заново открывали файл вы считали str для проверки на пустоту, но потом файл закрываете если он пуст, иначе вы ничего не делаете и продолжаете получать данные из открытого файла
0
1 / 1 / 3
Регистрация: 28.01.2013
Сообщений: 169
01.05.2013, 09:50  [ТС] 9
Блин точно =( Плохо получается, когда в голове одно, а написано другое
0
380 / 351 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 09:57 10
ququ_smile,
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2013, 09:57

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

НЕ читает полностью строку из файла
Пишу архивирование по алгоритму Хаффмана,при кодировании все идет нормально по отладчику все...

Напечатать первую строку, пятую строку текстового файла
имеется текстовый файл , напечатать а) его первую строку б) его пятую строку

Дан текстовый файл. Вставить в начало файла его последнюю строку, а в конец первую строку.
Помогите решить задание, заранее спасибо. Дан текстовый файл. Вставить в начало файла его...

Найти порядковый номер максимального элемента и записать его в первую строку файла, во 2-ю строку сам массив
var f, r: file of char; c: char; i, n,k: integer; max:char; x: array of char; ...


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

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

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