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

Exception при считывании данных с помощью ifstream

21.05.2017, 18:32. Показов 775. Ответов 1
Метки нет (Все метки)

При компилировании кода выдаёт ошибку (см. скрин), крутил код по-разному, проверил все функции, нерабочей оказалась "read_file", эту функцию написал по образцу, только вот моя не работает, хотя отличий практически не имеет, гляньте пожалуйста, может кто-то сможет мне помочь


C++ (Qt)
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
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include <LIMITS.h>
 
using namespace std;
 
struct stack 
{
    string fio;
    int age;
    int course;
    double average_score;
    stack *next;
};
 
void write_stack(stack *&head, string fio, int age, int course, double average_score)
{
       stack *cur = new stack;
       cur -> fio = fio;
       cur -> age = age;
       cur -> course = course;
       cur -> average_score = average_score;
       cur -> next = head;
       head = cur;
       return;
}
 
int stack_reading(stack *const head)
{
   int course = INT_MIN;
   stack *cur = head;
   if(head) 
     course = cur -> course;
   else 
     cout << "Стек пуст." << endl;
   return course;
}
 
void print_stack(stack *const head)
{
  for (stack *cur = head; cur != NULL; cur = cur -> next)
  cout << cur -> fio << "  " << cur -> age << "  " << cur -> course << "  " << cur -> average_score << endl;
  cout << "Конец стека." << endl;
}
 
void write_file(stack *const head)
{ 
  ofstream database;
  database.open("database.txt");
  for (stack *cur = head; cur != NULL; cur = cur -> next)
    database << cur -> fio << "_" << cur -> age << "_" << cur -> course << "_" << cur -> average_score << endl;
  database.close();
  cout << "Конец записи в файл." << endl;
}
 
void read_file(stack *&head)
{ 
  stack *cur = new stack;
  string fio_read_file;
  int age_read_file = 0;
  int course_read_file = 0;
  double average_score_read_file = 0;
 
  ifstream database;
  database.open("database.txt");
  
  while(true)
  {
      database >> fio_read_file;
      if(database.eof()) break;
      database >> age_read_file;
      database >> course_read_file;
      database >> average_score_read_file;
      write_stack(head, fio_read_file, age_read_file, course_read_file, average_score_read_file);
  }
  database.close();
  cout << "Успешное чтение файла + инициализация стека2." << endl;  
}
 
void search(stack *&head)
{
    string fio_search;
    int age_search = 0;
    int course_search = 0;
    double average_score_search = 0;
    double average_score_all = 0;
    double average_score_all_final = 0;
    int counter = 0;
    int input_course;
 
    cout << "Введите курс: "; cin >> input_course;
 
    for (stack *cur = head; cur != NULL; cur = cur -> next)
    {
            course_search = cur -> course;
            average_score_search = cur -> average_score;
            if(course_search == input_course)
            {
                average_score_all += average_score_search;
                counter++;
            }
    }
 
    average_score_all_final = average_score_all / counter;
    cout << "Студенты, имеющие средний балл выше среднего балла по курсу (" << average_score_all_final << "):" << endl;
 
    for (stack *cur = head; cur != NULL; cur = cur -> next)
    {
        fio_search = cur -> fio;
        age_search = cur -> age;
        course_search = cur -> course;
        average_score_search = cur -> average_score;
        if(course_search == input_course && average_score_search > average_score_all_final)
            {
                cout << "Имя: " << fio_search << ". Возраст: " << age_search << ". Средний балл: " << average_score_search << "." << endl;
            }   
    }   
}
 
void delete_element(stack *&head) // - функция удаляет элемент стека
{    
     stack *del = head;
     head = head -> next;
     delete del;
     return;  
}
 
void mem_clear(stack *&head)
{   
for (stack *cur = head, *del = cur; del != NULL; del = cur)
       {                             
       cur = cur -> next; 
       delete del;     
       } 
return; 
}
 
 
int main()
{
  setlocale(0, "rus");
 
  stack *head1 = NULL;
  stack *head2 = NULL;
 
  cout << stack_reading(head1) << endl; // - чтение элемента стека в вершине
  cout << "Введите количество студентов: ";
  int n; cin >> n;
 
  for (int i = 0; i < n; i++)
  {
      string fio;
      int age;
      int course;
      double average_score;
      cout << "Введите фамилию студента №" << i + 1 << ": ";
      cin >> fio;
      cout << "Введите возраст: ";
      cin >> age;
      cout << "Введите курс: ";
      cin >> course;
      cout << "Введите средний балл: ";
      cin >> average_score;
      write_stack(head1, fio, age, course, average_score);
  }
 
  write_file(head1); // - запись в txt
  print_stack(head1); // - вывод стека1 в консоль
  //read_file(head2); // - чтение файла + инициализация стека2
  //print_stack(head2); // - вывод стека2 в консоль
  //search(head2);
  //mem_clear(head2); // - освобождение памяти, занимаемой стеком
               
_getch();
return 0;
}

Функция исходного кода:
C++ (Qt)
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
void readfile (stack*& head)
{ 
  stack * cur = new stack;
  int i=0;
  ifstream database;
  database.open("database.txt");
  int inf1;
  string fio1;
  int y1;
  while(true)
  {
    /*  i++;
      if(i==1){
          database>>inf1;
 
      }
      if(i==2){
          database>>fio1;
 
      }
      if(i==3){
          database>>y1;
          push(head,inf1,fio1,y1);
          i=0;
      }*/
      database>>inf1;
      if(database.eof())break;
      database>>fio1;
      database>>y1;
          push(head,inf1,fio1,y1);
  }
  database.close();
  cout << "Конец чтения из файла"<<endl;  
}
Миниатюры
Exception при считывании данных с помощью ifstream  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2017, 18:32
Ответы с готовыми решениями:

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

Кодировка данных при считывании из БД
Здравствуйте. Подскажите пожалуйста, я записываю строку в базу SQLite вот так ...

Проблема при считывании данных из dataGridView
Я сравниваю некое поле нового объекта с данными в столбце datagridview если это поле совпадает с...

Ошибка при считывании данных с файла
Среда разработки Visual Studio 2008. Тип проэкта - консольное приложение. Проблема в следующем. ...

1
0 / 0 / 0
Регистрация: 08.11.2016
Сообщений: 4
21.05.2017, 21:53  [ТС] 2
Перезалил скрин, качество получше будет*

Добавлено через 1 час 54 минуты
Разобрался, можно закрывать. Особенности чтения информации из файла через ifstream.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2017, 21:53

Ошибка при считывании строковых данных
Нужно просто считать русский текст из файла, выводит смайлики без пробелов. #include &quot;stdafx.h&quot;...

Запись данных из файла при использовании ifstream
Добрый день,возник вопрос. У меня есть файл содержимое которого примерно такое : {1 , 2, 3, 4, 5,...

Проверка правильности данных при считывании из файла
Вопрос, есть ли что-то подобное cin.bad, но для считывания из файла? Программа заполняет массив из...

Преобразовать типы данных при считывании с ini файла
Считываю значение с ini файла и присваиваю переменной...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru