C++ Для начинающих вывести текст из файла на экран

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

 Где-то должно быть описано уже, но искать тяжело. У начинающих может возникнуть вопрос: «Как вывести текст файла на экран». Дело не хитрое, но если начинающих принудительно заставляют использовать старые версии компиляторов, то тут могут возникнуть проблемы. Думаю эта тема достаточно актуальна (была когда я это писал).

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

 По приведенному коду говорить почти нечего. Код говорит сам за себя.
while (!in1.eof()) — Читается как: "До тех пока не достигнут конец файла, выполнять…"
 Первой была написана функция по вводу текста в файл, а после нее написана функция чтения текста из файла и вывода информации на экран. Так как у меня с русской кодировкой проблем нет, то записывая строки русским шрифтом, текст мне выводился русским.

Примечание:
Для тех кто использует DosBox Borland C++ 3.1, предложенный в этом блоге, скорее всего переход на русские символы правая клавиша ctrl. Если в качестве пути файла указывать "C:…", то файл записывается в папку где установлена DosBox С++. (У меня C:\\BORLAND).

Вот пример для Visual Studio

Запуск Ctrl+F5

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

//Шрифт консоли нужно делать Lusidia Console/ для кодировки в консоли (к BC3.1 отношения не имеет)

В непонятных моментах может быть что это за таинственный указатель. Когда была объявлена переменная f1, это и был объявлен указатель, который бегает по файлу и на что-то в нем указывает (либо на начало какой-то последовательности, либо на бит информации). В моем случае на бит, этот самый бит отдавался в переменную ch и выводился на экран.

Второй (конкретно для меня) не очень понятный момент. Когда я знакомился с похожим примером, получая первые знания по этой теме, там переменная ch имела тип int (как обязательный) с последующим преобразованием его в char при выводе на экран. Причины этого я не помню, но какой-то такой нюанс был и делалось не просто так. Если знающие люди подскажут, я исправлю и опишу пояснение.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

16 комментариев: C++ Для начинающих вывести текст из файла на экран

  • Cuthbert говорит:

    В строке char *FName="C:\MyFile.txt"; лучше написать char *FName="C://MyFile.txt";
    Например, в Dev C++ как в первом случае не компилирует.

  • Аноним говорит:

    const N=256; //Константный размер строки
    Это ну очень просто урощает. Если мне надо в строку куда большее число элементов, скажем миллиона 2, что тогда делать?

    Автор сайта отвечает:
    разумеется то, как я описывал, упрощенный вариант, потому как эти все материалы сайта для начинающих, которым трудно понимать разные выкрутасы крутых программистов.

    я не очень понимаю в чем проблема.

    считать не по строкам, а посимвольно или порционно
    или может вам пример нужен создания строки более чем в 2.000.000 символов?

  • Visual Studio говорит:

    а подскажите пожалуйста, как посимвольно выводиь текст?

    таки пример изложенный в статье это бинарное дерево или двусвязный список?

    Автор сайта отвечает:

  • Sergio говорит:

    Добрый день! Вопрос появился: а как считывать построчно информацию из файла в разные переменные?

    Тут по циклу считываем в один и тот же массив, а потом выводим. Хочется понять, как считать первую строчку из файла в один массив, вторую строчку — в другой массив и т.д… 😐

    таки пример изложенный в статье это бинарное дерево или двусвязный список?

    Автор сайта отвечает:
    1. Создать Массив строк любым удобным для вас способом, не обязательно описанным мной.
    2. Использовать посимвольный проход по файлу.
    3. Использовать функцию, которая будет принимать номер строки (этот номер является индексом для массива строк) и текущий номер символа по создаваемой строке (курсор для строки). Номер строки нужно увеличивать если в символ считается признак конца строки, а текущий номер символа (тот, что курсор) обнулять (обозначать им начало строки)
    3. Строка есть массив. Конечно, можете создать еще и сверху массивы, как переменные, и выполнить посимвольное копирование элементов из каждой строки в соответствующий массив, но это едва ли нужно.

  • Gen говорит:

    Все таки правильней будет
    const char *FName="C:\\MyFile.txt"; //Путь к файлу
    а так
    char *FName="C:\MyFile.txt"; //Путь к файлу
    кодеблок ругается.

    таки пример изложенный в статье это бинарное дерево или двусвязный список?

    Автор сайта отвечает:
    Я посмотрел у себя в CodeBlocks (компилятор minGW) ругается только на void main,
    но не на char *FName="C:\MyFile.txt"; //Путь к файлу

  • kollok говорит:

    а за что отвечает эта строчка:
    system("CLS");
    ?
    ато не совсем понял её здесь назначение

    таки пример изложенный в статье это бинарное дерево или двусвязный список?

    Автор сайта отвечает:
    В Borland C++ 3.1 экран при запуске программы сам не очищается.
    Эта строчка выполняет очистку экрана.
    Вполне возможно, что в вашем случае эта строчка просто лишняя и можно ее убрать.

    kollok говорит:
    Благодарю)

  • Иван Иванов говорит:

    Объявлять

    char *S = {""};

    а потом сразу считывать туда строку символов — весьма плохая затея! Память-то под строку не выделена! И куда указывает S? Берём оч-ч-чень длинную строчку и получаем крах программы. Компилятор, кстати, в этом случае не ругается. Ему глубоко фиолетово, была ли выделена память для указателя. Он куда-то указывает, вот туда и будет записана строка, даже если в этом "куда-то" записаны нужные для дальнейшей работы программы данные.

    Если уж объявили строку таким образом, то следует под неё выделить место:

    char *s = {""};

    s = new char [N];

    а при считывании следить, чтобы длина строки не превысила N.

    Для считывания безразмерных строк, имхо, удобнее использовать std::string.

    Автор сайта отвечает:
    я исправлю про char *S = {""}; как будет время и желание. замечание справедливое. я ошибся.
    насчет string тоже верно, но тут маленький нюанс, что можно и потруднее. вреда от этого быть не должно.

  • Аноним говорит:

    Очень познавательная статья, респект автору за проделанный труд!!!

  • Aleks говорит:

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

    • admin говорит:

      Нужны примеры ввода данных и вывода. Такое условие, какое оно у Вас, может трактоваться различными вариантами.

      • Aleks говорит:

        Спасибо за проявленный интерес.
        Задание такое- ввести текст в файл. Потом его вывести на экран. Далее предусмотреть работу с этим текстом, а именно поиск определенных букв или знаков. Подсчет определенных букв или знаков в этом тексте.
        Я так понимаю нужно после ввода текста написать наверное switch c кейсами и предложить пользователю варианты: 1. «подсчитать символы введите нужный символ/букву и нажмите 1″
        2.»подсчитать пробелы нажмите 2″, 3.»подсчитать слова нажмите 3», 4. «подсчитать предложения нажмите 4», 5. «найти и посчитать одинаковое слово, введите слово и нажмите 4». ну и т.п.

        • admin говорит:

          Подсчет определенных символов не стоит создания новой темы. Решение в лоб — посимвольное чтение файла.
          Подсчет сколько раз какой символ встречается в файле — мода. Она же (мода) может помочь с подсчетом определенных символов.
          Подсчет слов стоит создания новой темы, но у меня несколько тем по подсчету слов в строке. А файл — он как одна большая строка. Я сомневаюсь, что Вам сейчас требуется обработка слишком большого текстового файла.
          Подсчет одинаковых слов. Вот это может и стоит создания темы, но я лучше помогу доделать чем опишу. Так лучше будет делающему, потому что делающий сможет столкнуться с ошибками, которых я могу не предполагать.

          Это все упражнения, которые мы должны выполнять используя те знания, что у нас есть.
          Хотите, чтобы помог разобраться, я согласен помочь разобраться.
          Но я не согласен просто сделать готовое, хотя задача достаточно проста. (не из ряда сложных).

  • Домовенок говорит:

    Добрый день! Подскажите пожалуйста как вывести все вхождения имени в текст (имя + 5 символов до и 5 символов после него).

  • Наська говорит:

    Подскажите пожалуйста как можно сделать:

    Дана строка, содержащая пробелы. Найдите в ней самое длинное слово, выведите на экран это слово и его длину.

    Вход: одна строка, содержащая пробелы. Слова разделены ровно одним пробелом. Строка должна считываться методом getline (программа должна считывать только одну первую строку). Выход: самое длинное слово в строке и его длина.

  • Олег говорит:

    Как вывести строки из файла, в которых содержится заданное слово? Пока сделал так

    • admin говорит:

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

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

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

- Я тут котёнка завела. Помоги придумать какое-нибудь компьютерное имя... - Мышка! - Ты чё, это же котик! - Ну, тогда БЛОХ ПИТАНИЕ.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок