Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
54 / 54 / 10
Регистрация: 26.09.2011
Сообщений: 186

Чтение из файла

04.05.2012, 12:41. Показов 1058. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2012, 12:41
Ответы с готовыми решениями:

Как заменить чтение строки из консоли на чтение текстового файла?
основное задание: найти частоту суффикса (например, &quot;ing&quot;) в текстовом документе. в прикреплённом коде текст вводится прямо в консоль,...

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите. В Pascal'e я не силен, так что не бейте меня ногами, но есть задача: написать обычную программу для расчета некоторых...

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -&gt; Vehicles -&gt; Firetruck_0 В этой папке лежит файл формата .dat Что нужно сделать? ...

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

Добавлено через 1 минуту
Цитата Сообщение от andy_111 Посмотреть сообщение
А что Вам мешает получить размер файла в байтах, разделить его на размер структуры Student и таким образом получить число структур в файле? Это число будете использовать при создании массива структур и в цикле.
Спасибо за идею, уверен в дальнейшем пригодится, но я пока не знаю как узнать размер файла
0
95 / 64 / 5
Регистрация: 03.07.2011
Сообщений: 148
04.05.2012, 14:15
Я с файлами работаю не через потоки ввода, для моего метода доступа размер можно узнать так
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.05.2012, 14:15
Помогаю со студенческими работами здесь

Чтение заголовка PCX файла и чтение растровых данных PCX файла
Привет форумчане! Столкнулся с такой проблемой. Нужно считать заголовок PCX файла и растровые данные PCX файла. Код написал. Часть...

Чтение файла CSV и чтение из Table View
Здравствуйте, задача считать столбцы и строки excel в TextEdit. Прошу помощи в реализиции. Вручную сохраняю xls файл в csv. Потом надо...

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

Чтение бинарного файла - чтение первых 9 байт
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void ATS44Encoder::FileEncode() { QFile* file = new...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru