Меню Закрыть

Считать массив строк из файла c

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

Файл (ы) — это просто большие блоки текста, включая пробелы. Файл выглядит так:

Язык программирования — это искусственный язык, разработанный
передавать инструкции на машину, особенно
компьютер. Языки программирования могут быть использованы для создания
программы, которые контролируют поведение машины и / или
выразить алгоритмы точно.
Самые ранние языки программирования предшествуют изобретению
компьютера, и были использованы для управления поведением
такие машины, как жаккардовые станки и пианино.
Тысячи разных языков программирования были
создано, главным образом, в компьютерной области, причем многие
создан каждый год. Большинство языков программирования описывают
вычисления в императивном стиле, то есть как последовательность
команд, хотя некоторые языки, такие как те, которые
поддержка функционального программирования или логического программирования, использование
альтернативные формы описания.

Я хочу прочитать каждую строку в свой собственный элемент массива строк.

У меня есть другая функция, которая успешно использует getline () для отображения каждой строки текстового файла по 10 строк за раз.

Решение

Обычно так можно читать строки, используя ifstream :

или прочитать последние 10 строк:

и тогда вы можете напечатать последние 10 строк:

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

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

Возможно, ваш файл не содержит правильных маркеров конца строки, как ожидает ваша программа, но ваш код предполагает этот файл только что получил numrecords маркеры конца строки. Где эта переменная определена и как вы ее получите — это другой вопрос.
Не используйте статический массив здесь, используйте std :: list, используйте list::reverse_iterator (может получить значение от list::rbegin() итерируйте 10 раз, если итератор не станет равным list :: rend ()) для итерации по последним 10 записям, ваш код будет намного проще (на самом деле, всего несколько строк)

Читайте также:  Самые лучшие советские колонки

По ходу дела, я очень плохо понял тему указателей и работы с памятью, и теперь вот никак не могу сделать, казалось бы простейшую вещь.
Есть текстовый файл со словами, записанными по одному слову в строчку. Нужно считать каждую строку в массив arr[]. Пробовал и fscanf и fgetsе — не получается 🙁
Подскажите, что я не так делаю, и как правильно?

  • Вопрос задан более двух лет назад
  • 2280 просмотров

Спасибо за ответ!
Функция fscanf мне вполне подходит, т.к. в моих исходных данных все строки состоят из одного слова. С выделением памяти, я кажется разобрался. В цикле, перед тем как использовать fscanf я выделяю память для элемента массива.

Но с высвобождением — не уверен что делаю верно. Правильно ли высвобождается память в этом цикле?

В итоге программа работает, но не совсем корректно. Я вывожу на экран не пустые ячейки массива с помощью цикла:

И получаю результат:

Откуда берутся лишние три строки, и ошибка сегментации?

Все верно, это помогло. Спасибо!
Код работает корректно.
А что с памятью? Верно ли я ее высвобождаю циклом

Или нужно как то по другому?

res2001, да. Это понятно, теперь код полностью корректно работает. Но не совсем понятна работа fscanf в данном контексте. Если я, например, не сразу считываю в элемент массива arr[], а предварительно записываю данные в созданную переменную типа char word[SIZE]:

то код уже работает не корректно.
Все элементы массива заполняются последней считанной строкой:

Если я правильно понимаю, то элементы массива получают ссылку на word, и получают значение которое хранится по адресу переменной word. Но как это изменить — не пойму. Как передать в элемент массива именно значение word?

Читайте также:  Erisson 32les70t2 нет подсветки

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

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

Стандартная библиотека языка C++ включает множество функций для работы с файлами. Описание функций можно найти в сети или в учебниках по C++. Здесь же я опишу одну, которая позволит произвести чтение строки из файла.

Для начала определимся с файлом, с которого будем считывать информацию. Я создал файл с именем «strings.txt» и записал в него информацию, которую буду считывать в массив и выводить на экран.

Содержание файла strings.txt

Три строки, содержащиеся в файле, я запишу массив и выведу на экран.

Пингвин читает содержимое файла

Переходим к написанию программы на C++.

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

Объявим две целочисленные константы len и strings, они будут хранить максимальную длину наших строк и количество строк. Объявим символьную константу ch, которая будет хранить разделяющий символ. Первые две константы будут использоваться для объявления массива. Мой файл содержит 3 строки

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

Создадим объект класса ostream, в конструктор поместим адрес файла, флаги открытия.

Флаг ios::in позволяет открыть файл для считывания, ios::binary открывает его в двоичном режиме.

Далее стоит проверить открылся ли файл, если не открылся, то завершаем работу программы.

В данный момент программа имеет такой вид

Теперь остается описать алгоритм считывания строк из файла и занесения их в массив с последующим выводом. Для этого понадобится цикл от нуля до strings с инкрементом переменной r. Во время каждого прохода цикла используем перегруженную функцию getline() объекта fs с тремя аргументами.

Читайте также:  Фон для красного текста

fs.getline(Массив_символов, Макс_длина_строки, Разделитель_строк)

Функция считывает символы из файла, пока не считает количество равное Макс_длина_строки, либо не встретит на своём пути символ равный Разделитель_строк, а после записывает считанные символы в Массив_символов. В качестве разделителя в моём текстовом файле используется перенос строки.

После сразу же выводим содержимое строки, хранящееся в массиве, при помощи поточного вывода в консоль cout.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.