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

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

Войти
Регистрация
Восстановить пароль
 
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
#1

Чтение из файла - C++

04.05.2012, 12:41. Просмотров 696. Ответов 4
Метки нет (Все метки)

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>
 
using namespace std;
//такая струтура для хранения Имени студента, группы (например ММ-263 или ММз-263)
struct Student
{
    char name[20];
    char gryppa[7];
    float srbal;
};
 
int main()
{
    //массив структур на 3 записи
    Student *p = new Student [3]; 
       
    int cnt=0, i=0; //cnt - общее количество студентов, i - переменная
    
    ifstream fin; // создаем поток для ввода из файла
    fin.open("dat.txt"); // говорим, что есть такой файл
 
    if(!fin.is_open()) // но нужно проверить
    {
        cout << "Error";// ну и тут наверное завершить приложение, возвратив единичку
    } else cout << "File is opened"; 
 
    //а здесь я уже не понимаю
    //значит в следующем цикле необходимо считывать из файла данные построчно
    //формат хранения данных, например
    //Петров
    //XX-123
    //4.26
    while(i<3 && ???) // пока не заполним весь массив (массив у нас на 3 элемента) и...
    //а если файл пустой, то это надо как-то проверить
    //а если не пустой, но подошли к концу файла
    {
        //считывать данные предполагается таким образом
        fin.getline(p[i].name, 20);
        fin.getline(p[i].gryppa, 7);
        fin >> p[i].srbal;
        //дальше готовимся считывать следующую запись
        i++; //ну и как-то увеличиваем число студентов [I]cnt[/I] на единицу
        //а тут, наверное, необходимо сново проверить, а не конец ли файла
    }
    //вывод того, что считали
    for(int i=0; i<cnt; i++)
    {
        cout << "Im9: ";
        cout << p[i].name << endl;
        cout << "gryppa: ";
        cout << p[i].gryppa << endl;
        cout << p[i].srbal << endl << endl;
    }
 
}
Добавлено через 2 минуты
не могу разобраться со считыванием их файла разобраться. В цикле while надо бы как-то проверить, а не пустой ли файл, и не подошли ли мы к концу фала. Ведь может быть такое, что массив на 100 элементов, а в файле только 2 записи

Добавлено через 15 минут
В общем с таким кодом
и с фалом, в которм хранится такое сожержимое:
Petrov
BB-123
3
Ivanov
XX-123
5
Почему-то считает, что у меня три записи в файле. Соответственно вывод не правильный
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
struct Student
{
    char name[20];
    char gryppa[30];
    int srbal;
} ;
 
int main()
{
    Student *p = new Student [3];
 
    int cnt=0, i=0; //общее количество студентов
 
    ifstream fin;
    fin.open("dat.txt");
    if(!fin.is_open())
    {
        cout << "Error";
    } else cout << "File is opened";
 
    while(i<3 && cin.peek()!= EOF)//а если файл пустой//если следующий символ не символ новой строки увеличить cnt
    {
        fin.getline(p[i].name, 20);
        fin.getline(p[i].gryppa, 30);
        (fin >> p[i].srbal).ignore(200, '\n');
        i++;        
        cnt++;
    }
    cout << cnt;
    for(int i=0; i<cnt; i++)
    {
        cout << "Im9: ";
        cout << p[i].name << endl;
        cout << "Nazvanie: ";
        cout << p[i].gryppa << endl;
        cout << "Sredniu ball";
        cout << p[i].srbal << endl << endl;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2012, 12:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение из файла (C++):

Переделать в коде чтение из файла в чтение с клавиатуры - C++
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...

Чтение из файла. Повторное чтение файла - C++
Добрый день. Необходимо реализовать в программе функцию повторного чтения данных из файла, в случае некорректного ввода их в оный. Вот...

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt; using namespace std; struct...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? - C++
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

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

4
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
04.05.2012, 12:43 #2
denys_l,
C++
1
while(i<3 && cin.peek()!= EOF)//а если файл пустой//если следующий символ не символ новой строки увеличить cnt
А cin причем, если читаете из fin?
1
andy_111
90 / 59 / 2
Регистрация: 03.07.2011
Сообщений: 148
04.05.2012, 12:44 #3
А что Вам мешает получить размер файла в байтах, разделить его на размер структуры Student и таким образом получить число структур в файле? Это число будете использовать при создании массива структур и в цикле.
0
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
04.05.2012, 12:49  [ТС] #4
Цитата Сообщение от ForEveR Посмотреть сообщение
denys_l,
C++
1
while(i<3 && cin.peek()!= EOF)//а если файл пустой//если следующий символ не символ новой строки увеличить cnt
А cin причем, если читаете из fin?
Действительно... Смотрю в книгу, а вижу, непонятно, что. спасибо

Добавлено через 1 минуту
Цитата Сообщение от andy_111 Посмотреть сообщение
А что Вам мешает получить размер файла в байтах, разделить его на размер структуры Student и таким образом получить число структур в файле? Это число будете использовать при создании массива структур и в цикле.
Спасибо за идею, уверен в дальнейшем пригодится, но я пока не знаю как узнать размер файла
0
andy_111
90 / 59 / 2
Регистрация: 03.07.2011
Сообщений: 148
04.05.2012, 14:15 #5
Я с файлами работаю не через потоки ввода, для моего метода доступа размер можно узнать так
C++
1
2
3
4
5
6
7
8
//Открываем файл на чтение, бинарный режим
FILE *hFile = fopen(filename, "rb");
//Позиционируемся на конец файла
fseek(hFile, 0, SEEK_END);
//Читаем текущую позицию
long lSize = ftell(hFile);
//Закрываем файл
fclose(hFile);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2012, 14:15
Привет! Вот еще темы с ответами:

Чтение из файла - C++
Есть задание: написать программу,которая считывыает числа из файла, написанные в нем через пробел. Числа кодируются и записываются в новый...

Чтение из файла - C++
Здравствуйте. Хочу, чтобы программа читала значения переменных из файла input.txt: Please choose the crystal lattice. Type 1 for BCC, 2...

Чтение файла - C++
Добрый день, вопрос, конечно, повторяющийся и от поиска лопата сломалась, но 2 день не могу такое элементарное сделать, а именно:...

чтение из файла - C++
помогите, пожалуйста, найти ошибку. При вводе данных о двух работниках, запись их в файл происходит нормально, а от чтение выдает ошибку(( ...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
04.05.2012, 14:15
Ответ Создать тему
Опции темы

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