Чтение вектора из файла си

Как прочитать файл в вектор в C ++?

Мне нужно читать с .data или же .txt файл, содержащий новый float число в каждой строке в векторе.

Я искал далеко и широко и применил множество различных методов, но каждый раз, когда я получаю один и тот же результат Main.size() из 0 и ошибка, говорящая «Vector Subscript out of Range» так что, очевидно, вектор просто ничего не читает в файл.

Примечание: файл находится как в папке, так и включен в проект VS.

Во всяком случае, вот мой код:

Результат, который я получаю, всегда прост:

Видео:Чтение из файла в Си (Кружок программирования)Скачать

Чтение из файла в Си (Кружок программирования)

Решение

Ваш цикл неправильный:

Кроме того, более идиоматический способ чтения чисел в вектор и записи их в стандартный вывод — это что-то вроде этого:

хотя вы должны проверить статус ifstream для ошибок чтения.

Видео:Работа с файлами с++. Чтение из файла с++ ifstream. Изучение С++ для начинающих. Урок #116Скачать

Работа с файлами с++. Чтение из файла  с++ ifstream. Изучение С++ для начинающих. Урок #116

Другие решения

Просто чтобы немного расширить ответ Джанхопанзы …

Является ли это:

  1. Создайте i и установите его 0 ,
  2. Задавать i в Main.size() — 1 , поскольку Main пустой, Main.size() является 0 , а также i устанавливается на -1 ,
  3. Main[-1] это за пределами доступа. Kaboom.

Просто совет.
Вместо того чтобы писать

как предложено выше, напишите:

использовать итераторы. Если у вас есть C++11 поддержка, вы можете заявить i как auto i=Main.begin() (просто удобный ярлык, хотя)

Это позволяет избежать неприятных один-позиционно-вне границы ошибка, вызванная отсутствием -1 непреднамеренно.

1.
В цикле вы назначаете значение, а не сравниваете значение так

i = ((Main.size ()) — 1) -> i = (- 1), так как Main.size ()

Main [i] выдаст «Нижний индекс вектора вне диапазона», потому что i = -1.

Видео:Работа с файлами с++. Запись в файл. c++ ofstream. Изучение С++ для начинающих. Урок #115Скачать

Работа с файлами с++. Запись в файл. c++ ofstream. Изучение С++ для начинающих. Урок #115

С++ чтение данных из файла *.txt в вектор структуры

Я новичок в C++ и имею некоторые недоразумения в отношении чтения/записи файла.

У меня есть файл данных.txt, содержащий информацию о улицах, например, улицу, домашний номер и количество квартир

У меня есть задача прочитать данные из файла, добавить новый, удалить ненужные и сделать некоторые расчеты о количестве квартир на определенной улице

Для хранения данных во время работы программы я создал вектор struct:

Программный код ниже:

Данные в.txt файле записываются так:

Каждая строка в файле.txt принадлежит к [i] -s вектору элементов структуры. Я не могу понять, как правильно добавлять данные из файла.txt в мой вектор структур во время работы программы (имя улицы может содержать до 5 или 6 слов и как программа может отделить ли это название улицы или это домашний номер или количество квартир)

Видео:Как читать из файла в C++? Подготовка к ЕГЭ по Информатике 2022.Скачать

Как читать из файла в C++? Подготовка к ЕГЭ по Информатике 2022.

Ввод данных из файла и вывод в файл

Видео:Язык Си для начинающих / #9 - Работа с файламиСкачать

Язык Си для начинающих / #9 - Работа с файлами

Открытие и закрытие файлов

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

В языке программирования C указатель на файл имеет тип FILE и его объявление выглядит так:

С другой стороны, функция fopen() открывает файл по указанному в качестве первого аргумента адресу в режиме чтения («r»), записи («w») или добавления («a») и возвращает в программу указатель на него. Поэтому процесс открытия файла и подключения его к программе выглядит примерно так:

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

При чтении или записи данных в файл обращение к нему осуществляется посредством файлового указателя (в данном случае, myfile).

Если в силу тех или иных причин (нет файла по указанному адресу, запрещен доступ к нему) функция fopen() не может открыть файл, то она возвращает NULL. В реальных программах почти всегда обрабатывают ошибку открытия файла в ветке if , мы же далее опустим это.

Объявление функции fopen() содержится в заголовочном файле stdio.h, поэтому требуется его подключение. Также в stdio.h объявлен тип-структура FILE.

После того, как работа с файлом закончена, принято его закрывать, чтобы освободить буфер от данных и по другим причинам. Это особенно важно, если после работы с файлом программа продолжает выполняться. Разрыв связи между внешним файлом и указателем на него из программы выполняется с помощью функции fclose() . В качестве параметра ей передается указатель на файл:

В программе может быть открыт не один файл. В таком случае каждый файл должен быть связан со своим файловым указателем. Однако если программа сначала работает с одним файлом, потом закрывает его, то указатель можно использовать для открытия второго файла.

Видео:Чтение и запись в файл с++ используя класс fstream c++. Изучение С++ для начинающих. Урок #118Скачать

Чтение и запись в файл с++ используя класс fstream c++. Изучение С++ для начинающих. Урок #118

Чтение из текстового файла и запись в него

fscanf()

Функция fscanf() аналогична по смыслу функции scanf() , но в отличии от нее осуществляет форматированный ввод из файла, а не стандартного потока ввода. Функция fscanf() принимает параметры: файловый указатель, строку формата, адреса областей памяти для записи данных:

Возвращает количество удачно считанных данных или EOF. Пробелы, символы перехода на новую строку учитываются как разделители данных.

Допустим, у нас есть файл содержащий такое описание объектов:

Тогда, чтобы считать эти данные, мы можем написать такую программу:

В данном случае объявляется структура и массив структур. Каждая строка из файла соответствует одному элементу массива; элемент массива представляет собой структуру, содержащую строковое и два числовых поля. За одну итерацию цикл считывает одну строку. Когда встречается конец файла fscanf() возвращает значение EOF и цикл завершается.

fgets()

Функция fgets() аналогична функции gets() и осуществляет построчный ввод из файла. Один вызов fgets() позволят прочитать одну строку. При этом можно прочитать не всю строку, а лишь ее часть от начала. Параметры fgets() выглядят таким образом:

Такой вызов функции прочитает из файла, связанного с указателем myfile, одну строку текста полностью, если ее длина меньше 50 символов с учетом символа ‘n’, который функция также сохранит в массиве. Последним (50-ым) элементом массива str будет символ », добавленный fgets() . Если строка окажется длиннее, то функция прочитает 49 символов и в конце запишет ». В таком случае ‘n’ в считанной строке содержаться не будет.

В этой программе в отличие от предыдущей данные считываются строка за строкой в массив arr. Когда считывается следующая строка, предыдущая теряется. Функция fgets() возвращает NULL в случае, если не может прочитать следующую строку.

getc() или fgetc()

Функция getc() или fgetc() (работает и то и другое) позволяет получить из файла очередной один символ.

Приведенный в качестве примера код выводит данные из файла на экран.

Запись в текстовый файл

Также как и ввод, вывод в файл может быть различным.

  • Форматированный вывод. Функция fprintf ( файловый_указатель, строка_формата, переменные ) .
  • Посточный вывод. Функция fputs ( строка, файловый_указатель ) .
  • Посимвольный вывод. Функция fputc() или putc( символ, файловый_указатель ) .

Ниже приводятся примеры кода, в которых используются три способа вывода данных в файл.

Запись в каждую строку файла полей одной структуры:

Построчный вывод в файл ( fputs() , в отличие от puts() сама не помещает в конце строки ‘n’):

Пример посимвольного вывода:

Видео:Запись ОБЪЕКТА КЛАССА в файл с++. Чтение объекта из файла c++ Для начинающих. Урок #117Скачать

Запись ОБЪЕКТА КЛАССА в файл с++. Чтение объекта из файла c++ Для начинающих. Урок #117

Чтение из двоичного файла и запись в него

С файлом можно работать не как с последовательностью символов, а как с последовательностью байтов. В принципе, с нетекстовыми файлами работать по-другому не возможно. Однако так можно читать и писать и в текстовые файлы. Преимущество такого способа доступа к файлу заключается в скорости чтения-записи: за одно обращение можно считать/записать существенный блок информации.

При открытии файла для двоичного доступа, вторым параметром функции fopen() является строка «rb» или «wb».

Тема о работе с двоичными файлами достаточно сложная, для ее изучения требуется отдельный урок. Здесь будут отмечены только особенности функций чтения-записи в файл, который рассматривается как поток байтов.

Функции fread() и fwrite() принимают в качестве параметров:

  1. адрес области памяти, куда данные записываются или откуда считываются,
  2. размер одного данного какого-либо типа,
  3. количество считываемых данных указанного размера,
  4. файловый указатель.

Эти функции возвращают количество успешно прочитанных или записанных данных. Т.е. можно «заказать» считывание 50 элементов данных, а получить только 10. Ошибки при этом не возникнет.

Пример использования функций fread() и fwrite() :

Здесь осуществляется попытка чтения из первого файла 50-ти символов. В n сохраняется количество реально считанных символов. Значение n может быть равно 50 или меньше. Данные помещаются в строку. То же самое происходит со вторым файлом. Далее первая строка присоединяется ко второй, и данные сбрасываются в третий файл.

🔥 Видео

#57. Файловые функции: fopen(), fclose(), fgetc(), fputc() | Язык C для начинающихСкачать

#57. Файловые функции: fopen(), fclose(), fgetc(), fputc() | Язык C для начинающих

Программирование на Си урок 37: Работа с файлами в языке СиСкачать

Программирование на Си урок 37: Работа с файлами в языке Си

Язык C++ с нуля | #12 Работа с файлами в c++ через ifstream и ofstream.Скачать

Язык C++ с нуля | #12 Работа с файлами в c++ через ifstream и ofstream.

Язык Си с нуля - Урок 37 - Работа с файлом в бинарном режимеСкачать

Язык Си с нуля - Урок 37 - Работа с файлом в бинарном режиме

Язык Си с нуля - Урок 41 - Работа с файлом - запись и чтение, добавление, перемещение, позиция.Скачать

Язык Си с нуля - Урок 41 - Работа с файлом - запись и чтение, добавление, перемещение, позиция.

Язык Си с нуля - Урок 36 - Работа с файлом в текстовом режимеСкачать

Язык Си с нуля - Урок 36 - Работа с файлом в текстовом режиме

Уроки C# – File, FileStream, StreamWriter – работа с файлами, копирование, перемещение, запись – C#Скачать

Уроки C# – File, FileStream, StreamWriter – работа с файлами, копирование, перемещение, запись – C#

Уроки C++ с нуля / Урок #14 - Работа с файламиСкачать

Уроки C++ с нуля / Урок #14 - Работа с файлами

Заголовочные ФАЙЛЫ в Си за 6 МИНУТСкачать

Заголовочные ФАЙЛЫ в Си за 6 МИНУТ

Язык Си с нуля - Урок 47 - Многофайловые проекты. Создание и подключение. Заголовочные файлы.Скачать

Язык Си с нуля - Урок 47 - Многофайловые проекты. Создание и подключение. Заголовочные файлы.

vector | Библиотека стандартных шаблонов (stl) | Уроки | C++ | #1Скачать

vector | Библиотека стандартных шаблонов (stl) | Уроки | C++ | #1

C++ не читает кириллицу с файла! (Решение проблемы)Скачать

C++ не читает кириллицу с файла! (Решение проблемы)

Как работать с текстовыми файлами в си (часть 1)Скачать

Как работать с текстовыми файлами в си (часть 1)
Поделиться или сохранить к себе: