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

Функция чтения из файла - C++

Восстановить пароль Регистрация
 
Darkos
5 / 5 / 4
Регистрация: 16.05.2014
Сообщений: 74
17.05.2014, 21:48     Функция чтения из файла #1
Написал программу которая в зависимости от выбора пункта меню, записывает данные в файл или читает их.
Все было нормально пока не дошел до функции чтения из файла. Сначала хотел чтоб выводилась заданная строка, но у меня вообще ничего не получается вывести. Подскажите, как решить проблему?
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
// Программа учета успеваемости 
#include <iostream>
#include <fstream>
#include <string>
#include "klas.h"
;using namespace std;
 
int ex()
{
    error:
        int i;
        cout << "Для выхода в главное меню нажмите >> 1" << endl << "Ваш выбор >> ";
        cin >> i;
        if(i == 1) {return 1;}
        else {system("cls"); cout << "Ошибка ввода! Повторите попытку." << endl; goto error;}
}
int get()
{
    setlocale(0, "");
    ifstream fin("persons.txt", ios::in);
    if(!fin.is_open()) {cout << "Файл не найден!";}
    else
    {
        long file_size;
        fin.seekg(0, ios::end);
        file_size = fin.tellg();
        if(file_size == 0) {cout << "Файл пустой! Сначала заполните его!" << endl;}
        else
        {
            //В этой части нужно написать код, который будет выводить текст из файла
        
        
        }
    }
    cin.get();
    ex();
    return 0;
}
     .  .  .
    
}
void main()
{
    setlocale(0, "");            // Включаем русский язык
   
    .  .  .
 
get:
    get();
    goto menu;
 
   .  .  . 
 
exit:   
    cin.get();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
18.05.2014, 00:30     Функция чтения из файла #2
Это обычный поток. работай с ним как с cin'ом:
C++
1
fin >> /*что-то*/
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.05.2014, 01:42     Функция чтения из файла #3
Цитата Сообщение от Darkos Посмотреть сообщение
записывает данные в файл или читает их.
Цитата Сообщение от Darkos Посмотреть сообщение
Все было нормально пока не дошел до функции чтения из файла.
Какие данные? Как записывали? Зачем, перед чтением, определяете размер данных в файле?
Darkos
5 / 5 / 4
Регистрация: 16.05.2014
Сообщений: 74
18.05.2014, 10:02  [ТС]     Функция чтения из файла #4
Цитата Сообщение от monolit Посмотреть сообщение
fin >> /*что-то*/
Пробовал и так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   .  .  .
else
    {
        long file_size;
        fin.seekg(0, ios::end);
        file_size = fin.tellg();
        if(file_size == 0) {cout << "Файл пустой! Сначала заполните его!" << endl;}
        else
        {
            
            string str;
            fin >> str;
            cout << str;  //Вместо того чтоб вывести str переходит сразу к ex();
        
        }
    }
    ex();
  .  .  .
Добавлено через 12 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
Какие данные?
Данные в файле persons.txt таким образом:
фамилия имя 1 2 3 4 5 6
фамилия имя 1 2 3 4 5 6
1,2,3,4,5 - оценки
6 - средний бал

Цитата Сообщение от alsav22 Посмотреть сообщение
Как записывали?
Записывал так:
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
/* klas.cpp */
 
#include <iostream>
#include <fstream>
#include <string>
#include "klas.h"
;using namespace std;
 
 
/* Конструктор класса */ klas::klas()
{
    string s_name,s_famil;           // Обьявляем переменные
    cout << "**************  Имя и фамилию вводить английскими буквами  **************" << endl << endl 
         <<"Введите имя >>     ";
    cin >> s_name;
    cout << "Введите фамилию >> ";   // Вводим данные
    cin >> s_famil;
    name = s_name;
    famil = s_famil;
    
    klas::set_scores();
}
 
/* Деструктор класса */  klas::~klas()
{
    klas::save();
}
/* Записываем оценки, вычисляем средний бал */  void klas::set_scores()
{
    setlocale(0, "");            // Включаем русский язык
    ser_bal = 0.0;
    for(int i=0; i<5; i++)
    {
error:
        cout << "Введите оценку " << i+1 << " >> ";
        cin >> scores[i];
        if(scores[i]>12 || scores[i]<1)
        {
            cout << "Такой оценки нет! Повторите попытку." << endl;
            goto error;
        }
        ser_bal += scores[i];
    }
    ser_bal /= 5;
    
}
 
/* Выдаем имя */  string klas::get_name()
{
    return name;
}
/* Выдаем фамилию */  string klas::get_famil()
{
    return famil;
}
 
 
/* Выдаем средний бал */  float  klas::get_bal()
{
    return ser_bal;
}
/* Сохраняем данные в файл */ void klas::save()
{
    ofstream fout("persons.txt", ios::app);
 
    // Запись в файл
    fout << klas::get_name() << " "
         << klas::get_famil() << " ";
 
    for(int i=0; i<5; i++)
    {
        fout << scores[i] << " ";
    }
    fout << klas::get_bal()
         << endl;
 
    fout.close();     // Закрываем файл
}
/* Проверка на ошибку ввода */ int klas::exit()
{
    int a;
error:
    cout <<"Хотите выйти?" << endl << "Остатся >> 1 \t Выйти >> 0" << endl;
    cin >> a;
    if (a!=0 && a!=1) 
    {
        cout << "Вы ввели вневерное значение! Повторите попытку." << endl;
        goto error;
    }
    system("cls");
    return a;
}
 
/* main.cpp */
 
  .  .  .
set:
    while(true)
    {   
        klas *Person_1 = new klas();
        
        system("cls");    // Очистка консоли
        delete Person_1;
         
        if(Person_1->exit()==0) 
        {
            goto menu;
        }
    }
  .  .  .
Цитата Сообщение от alsav22 Посмотреть сообщение
Зачем, перед чтением, определяете размер данных в файле?
Если размер файла = 0, значит файл пустой и выводить нечего
C++
1
2
3
4
long file_size;
        fin.seekg(0, ios::end);
        file_size = fin.tellg();
        if(file_size == 0) {cout << "Файл пустой! Сначала заполните его!" << endl;}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.05.2014, 10:55     Функция чтения из файла #5
Цитата Сообщение от Darkos Посмотреть сообщение
C++
1
2
fin.seekg(0, ios::end);
file_size = fin.tellg();
В конец файла курсор переместили, а обратно?
Darkos
5 / 5 / 4
Регистрация: 16.05.2014
Сообщений: 74
18.05.2014, 17:42  [ТС]     Функция чтения из файла #6
alsav22, спасибо, получилось.
Не подскажите как можно вывести строку, номер которой вводит пользователь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2014, 22:27     Функция чтения из файла
Еще ссылки по теме:

Ошибка чтения из файла C++
Функция чтения столбцов чисел из текстового файла C++
C++ Каким образом после чтения из файла, узнать позицию для чтения следующего куска байт

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.05.2014, 22:27     Функция чтения из файла #7
Цитата Сообщение от Darkos Посмотреть сообщение
как можно вывести строку, номер которой вводит пользователь?
В цикле (проверяя n и конец файла), через fin.ignore(100, '\n'), пропустите нужное количество строк, потом читайте нужную.
Yandex
Объявления
18.05.2014, 22:27     Функция чтения из файла
Ответ Создать тему
Опции темы

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