Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 164
#1

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

30.04.2013, 18:58. Просмотров 628. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 18:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не читает первую строку из файла (C++):

Функция fopen() для большого текстового файла читает только первую строку - C++
Есть текстовой файл 4.5 мб, нужно его открыть для чтения из него строк. FILE *f = fopen(&quot;C:\\members.txt&quot;, &quot;r&quot;); Это мне...

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

Удалить первую строку из файла - C++
а как удалить строку с текстового фала, так что бы, последующие строчки сместились на позицию вверх? Тоесть если было: 1)строка ...

В первую строку выходного файла выведите ровно N различных целых чисел - C++
ПОМОГИТЕ РЕШИТЬ ЭТУ ЗАДАЧУ НА С++ ПЖ!!!! Как знают все близкие (и не очень близкие) знакомые Раджеша Кутраппали, ему сложно...

Как прочитать первую строку из файла а остальной текст повторить несколько раз? - C++
Я новичок в этом деле, прошу не осуждать. Помогите разобраться. Задание такое: Программа должна начать читать запись шоколада с...

Программа считывает только первую строку файла,как сделать чтобы она считывала все строки - C++
#include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; int main(int argc, char* argv) { setlocale(LC_ALL, &quot;rus&quot;); ...

9
Croessmah
Пришел
Эксперт CЭксперт С++
13771 / 7852 / 894
Регистрация: 27.09.2012
Сообщений: 19,267
Записей в блоге: 3
Завершенные тесты: 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;
}
1
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 164
30.04.2013, 21:27  [ТС] #3
Теперь вообще только 2-ю строчку записало

Я не понимаю что не так =(
0
yoghurt92
374 / 345 / 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();
 
}
1
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 164
01.05.2013, 03:17  [ТС] #5
Спасибо, работает! Но в чем была проблема? Я вижу вы убрали проверку на то, чист ли файл.Так записывало из-за этой проверки, которая связана со строками?
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 09:19 #6
ququ_smile, вы считывали из файла первую строку в str, вот она и не выводилась так как была уже считана)
0
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 164
01.05.2013, 09:39  [ТС] #7
Ну результат доказывает ваши слова, но я же после проверки закрывал файл и открывал его заново.Разве не должно было быть чтение опять сначала ?
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 09:45 #8
ququ_smile, должно было быть, но я не вижу где вы заново открывали файл вы считали str для проверки на пустоту, но потом файл закрываете если он пуст, иначе вы ничего не делаете и продолжаете получать данные из открытого файла
0
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 164
01.05.2013, 09:50  [ТС] #9
Блин точно =( Плохо получается, когда в голове одно, а написано другое
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
01.05.2013, 09:57 #10
ququ_smile,
0
01.05.2013, 09:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2013, 09:57
Привет! Вот еще темы с ответами:

Матрицы: поменять местами первую строку и строку, содержащую максимальный элемент - C++
1)В матрице поменять местами 1 строку и строку содержащие последнее вхождение элемента максимального где максимальный- максимальный элем...

Поменять местами первую строку и строку сумма элементов которой минимальна - C++
Дан двумерный массив размера NxM. Поменять местами первую строку и строку сумма элементов которой минимальна. Вывести полученную матрицу на...

Заменить строку матрицы с максимальной суммой элементов на первую строку - C++
3.Заменить строку матрицы P(n,m) с максимальной суммой элементов на первую строку поэлементно.

Поменять местами первую строку матрицы и строку, содержащую максимальный отрицательный элемент - C++
:cry: Ребята выручайте. Без вас мне край. У меня не было С++ ,но мне надо сделать задачку и отбодаться:-[ напишите по возможности с...


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

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

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