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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.84
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
#1

Вывод содержимого текстового файла на экран - C++

25.08.2011, 14:35. Просмотров 3369. Ответов 21
Метки нет (Все метки)

Нужно написать программу чтоб выводила содержимое текстового файла на экран, желательно по строчно после каждого нажатия ентер, ну или хотя бы чтоб просто выводило,кто поможет заранее благодарен, особенно если будут комментрии в программе с пояснением.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma argsused
# include <iostream>              // класс для работы с вводом-выводом
# include <fstream>
#include <conio.h>        // класс для работы с файлом
# include <string>            // класс для работы со строками
//-------------------Код программы для первой задачи----------
void main()
{
    using namespace std;
    string st,stt;
    cout << "enter name files:" <<endl;
    char name[10];
    cin >> name;
    ifstream inf(name);
    getline(inf,st);
    int i = 0, f = 1;
    for(i=0; i < st.length(); i++)
            stt +=st[i];
    cout << stt;
    getch ();
вот так получилось но считывает только первую строку нижние дальше не выводит как дописать надо чтоб все выводило строки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2011, 14:35     Вывод содержимого текстового файла на экран
Посмотрите здесь:
Вывод на экран содержимого файла C++
C++ Вывод содержимого файла на экран
C++ Ввод и вывод содержимого файла на экран
C++ Чтение файла и вывод его содержимого на экран
C++ Вывод на экран данные из текстового файла
Построчный вывод текстового файла на экран C++
C++ Не могу разобраться. Чтение и вывод на экран всего содержимого файла .txt на консоль
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
25.08.2011, 14:54     Вывод содержимого текстового файла на экран #2
Цитата Сообщение от lexflax Посмотреть сообщение
Нужно написать программу чтоб выводила содержимое текстового файла на экран
Доработал твой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# include <iostream>     // ГЄГ«Г*Г±Г± äëÿ Г°Г*áîòû Г± ââîäîì-âûâîäîì
# include <fstream>
#include <conio.h>   // ГЄГ«Г*Г±Г± äëÿ Г°Г*áîòû Г± ГґГ*éëîì
# include <string>   // ГЄГ«Г*Г±Г± äëÿ Г°Г*áîòû Г±Г® ñòðîêГ*ìè
//-------------------Êîä ïðîãðГ*ììû äëÿ ïåðâîé Г§Г*Г¤Г*Г·ГЁ----------
void main()
{
    using namespace std;
    string st,stt;
    cout << "enter name files: ";
    char name[10];
    cin >> name;
    ifstream inf(name);
    int i = 0;
    while(!inf.eof())
    {
        getline(inf,st);
        for(i=0; i < st.length(); i++)
            stt +=st[i];
        cout << st <<"\r\n";
        getch ();
    }
}
Добавлено через 1 минуту
Весь твой недочёт был, что читал из файла лишь 1-раз
Цитата Сообщение от lexflax Посмотреть сообщение
ifstream inf(name);
getline(inf,st);
а нужно в цикле чиать до конца файла

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(!inf.eof())
* * * * {
* * * * * * * * getline(inf,st);
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.08.2011, 14:54     Вывод содержимого текстового файла на экран #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>
#include <fstream>
#include <iostream>
 
int main()
{
    std::ifstream inf("1.txt");
    std::string str;
    while (inf.eof() == false)
    {
        std::getline(inf, str);
        std::cout << str;
        std::getchar();
    }
 
    return 0;
}
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.08.2011, 14:57     Вывод содержимого текстового файла на экран #4
C++
1
std::cout << std::fstream("input.txt").rdbuf();
-=ЮрА=-
Заблокирован
Автор FAQ
25.08.2011, 14:58     Вывод содержимого текстового файла на экран #5
Цитата Сообщение от Jupiter Посмотреть сообщение
C++
1
2
std::string str;
* * while (inf.eof() == false)
чем эта конструкция от моей отличается???

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
3
while(!inf.eof())
* * * * {
* * * * * * * * getline(inf,st);
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.08.2011, 14:59     Вывод содержимого текстового файла на экран #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
чем эта конструкция от моей отличается???
ничем но у вас осталось от ТС
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
# include <iostream> // класс для работы с вводом-выводом
# include <fstream>
#include <conio.h> // класс для работы с файлом
# include <string> // класс для работы со строками
//-------------------Код программы для первой задачи----------
void main()
что не есть правильно
-=ЮрА=-
Заблокирован
Автор FAQ
25.08.2011, 15:06     Вывод содержимого текстового файла на экран #7
Цитата Сообщение от Jupiter Посмотреть сообщение
но у вас осталось от ТС
- я всего лишь код ТС доработал, в коменты не вчитывался

Цитата Сообщение от lexflax Посмотреть сообщение
#include <conio.h> // класс для работы с файлом
- lexflax, посмотри тут http://ru.wikipedia.org/wiki/Conio.h
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
26.08.2011, 13:11  [ТС]     Вывод содержимого текстового файла на экран #8
while (inf.eof()) что означает eof???
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
26.08.2011, 13:18     Вывод содержимого текстового файла на экран #9
Цитата Сообщение от lexflax Посмотреть сообщение
while (inf.eof()) что означает eof???
Это функция, которая возвращает true, если достигнут конец потока. Такое использование (в заголовке цикла while) почти всегда означает ошибку в логике программы.

Добавлено через 1 минуту
Я имею в виду и эти варианты тоже
C++
1
while (inf.eof() == false)
C++
1
while (!inf.eof())
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
26.08.2011, 13:21  [ТС]     Вывод содержимого текстового файла на экран #10
Цитата Сообщение от grizlik78 Посмотреть сообщение
Это функция, которая возвращает true, если достигнут конец потока. Такое использование (в заголовке цикла while) почти всегда означает ошибку в логике программы.

Добавлено через 1 минуту
Я имею в виду и эти варианты тоже
C++
1
while (inf.eof() == false)
а почему вот эти означают ошибку в логике?
C++
1
while (!inf.eof())
а почему вот эти означают ошибку в логике?
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
26.08.2011, 13:23     Вывод содержимого текстового файла на экран #11
Не обязательно означают. Но чаще всего так и есть.
Потому, что надо проверять успешность операции чтения, а не достижение конца файла. Эту функцию можно вызвать чтобы убедиться, что файл закончился, а не для завершения цикла.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
26.08.2011, 13:30     Вывод содержимого текстового файла на экран #12
grizlik78, тогда как бы вы в данном случае написали заголовок цикла while ?
-=ЮрА=-
Заблокирован
Автор FAQ
26.08.2011, 13:35     Вывод содержимого текстового файла на экран #13
Цитата Сообщение от lexflax Посмотреть сообщение
а почему вот эти означают ошибку в логике?
об ошибке в какой логике ты говоришь?Функция eof возвращает 1 если достигнут конец файла и 0 если конец ещё не достигнут 1 - эквивалентна true 0 - false
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.08.2011, 13:38     Вывод содержимого текстового файла на экран #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
об ошибке в какой логике ты говоришь?Функция eof возвращает 1 если достигнут конец файла и 0 если конец ещё не достигнут 1 - эквивалентна true 0 - false
конец файла может встретится раньше чем '\n'
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
26.08.2011, 13:39     Вывод содержимого текстового файла на экран #15
Net_Wanderer, ну, например так
C++
1
while (std::getline(inf, str))
Но для строк это не так актуально, как, например, для чтения целых чисел из текстового потока.

Например, в этой программе легко получить бесконечный цикл. достаточно ввести букву.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
    int d;
    while (!std::cin.eof())
    {
        std::cin >> d;
        std::cout << "d = " << d << std::endl;
    }
    return 0;
}
В этой такой проблемы нет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int main()
{
    int d;
    while ( std::cin >> d )
    {
        std::cout << "d = " << d << std::endl;
    }
    if (!std::cin.eof())
    {
        std::cout << "Input error" << std::endl;
    }
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
26.08.2011, 13:46     Вывод содержимого текстового файла на экран #16
Цитата Сообщение от Jupiter Посмотреть сообщение
конец файла может встретится раньше чем '\n'
- можешь пояснить?
в reference eof написано что проверяет поток на достижение его конца, погуглив нашёл что единственный моент косой работы eof когда в текстовом режиме бинарник открываем и встречаем -1. Какое отношение к этому имеет символ перевода на другую строку не пойму...
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.08.2011, 13:51     Вывод содержимого текстового файла на экран #17
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Какое отношение к этому имеет символ перевода на другую строку не пойму...
по умолчанию getline читает до '\n' которого в строке может не быть
Thinker
Эксперт C++
4223 / 2197 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.08.2011, 13:52     Вывод содержимого текстового файла на экран #18
Цитата Сообщение от Jupiter Посмотреть сообщение
конец файла может встретится раньше чем '\n'
Наверное вы имели ввиду то, что если произвольных файл открыть как текстовый, то конец файла в текстовом формате (символ с кодом 26) может наступить совершенно неожиданно.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
26.08.2011, 13:57     Вывод содержимого текстового файла на экран #19
Цитата Сообщение от grizlik78 Посмотреть сообщение
В этой такой проблемы нет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int main()
{
    int d;
    while ( std::cin >> d )
    {
        std::cout << "d = " << d << std::endl;
    }
    if (!std::cin.eof())
    {
        std::cout << "Input error" << std::endl;
    }
    return 0;
}
Как я понимаю, оператор >> возвращает std::cin, к которому применяется operator void*, который в свою очередь возвращает NULL только если установленны failbit или badbit, но не eofbit.
http://www.cplusplus.com/reference/i...erator_voidpt/
Тогда почему если вводим EOF цикл завершается?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2011, 13:58     Вывод содержимого текстового файла на экран
Еще ссылки по теме:
Проверка содержимого текстового файла C++
Проверка содержимого текстового файла C++
Копирование содержимого текстового файла C++
Отправка содержимого текстового файла на почту C++
Копирование содержимого одного текстового файла в другой C++

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
26.08.2011, 13:58     Вывод содержимого текстового файла на экран #20
Про текстовые файлы и чтение строк.
Пусть у нас есть текстовый файл, в котором записано 2 строки.
Вот эта программа может вывести 2 или 3 строки, в зависимости от того, заканчивается ли вторая строка символом перевода строки или нет. Если заканчивается, то будет выведена третья, пустая, строка.
C++
1
2
3
4
5
while ( !in.eof() )
{
    getline(in, str);
    cout << "line: " << str << std::endl;
}
Эта программа в обоих случаях выведет 2 строки.
C++
1
2
3
4
while ( getline(in, str) )
{
    cout << "line: " << str << std::endl;
}
Yandex
Объявления
26.08.2011, 13:58     Вывод содержимого текстового файла на экран
Ответ Создать тему
Опции темы

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