Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/74: Рейтинг темы: голосов - 74, средняя оценка - 4.91
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
1

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

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

Author24 — интернет-сервис помощи студентам
Нужно написать программу чтоб выводила содержимое текстового файла на экран, желательно по строчно после каждого нажатия ентер, ну или хотя бы чтоб просто выводило,кто поможет заранее благодарен, особенно если будут комментрии в программе с пояснением.
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 ();
вот так получилось но считывает только первую строку нижние дальше не выводит как дописать надо чтоб все выводило строки?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2011, 14:35
Ответы с готовыми решениями:

Функция: вывод содержимого текстового файла на экран
Привет всем!На уроке проходили тему &quot;ИСПОЛЬЗОВАНИЕ ФАЙЛОВОЙ СИСТЕМЫ&quot;,я чото неразобрал что идет к...

Вывод на экран содержимого файла
Напишите программу, которая выводит на экран содержимое файла A:\numbers.txt. За ранние...

Вывод содержимого файла на экран
С помощью подсказок и своего немного труда создал программу. Но последние условие выполняется не...

Ввод и вывод содержимого файла на экран
#include&lt;iostream&gt; #include&lt;fstream&gt; using namespace std; int main() { ofstream file;...

21
Заблокирован
Автор 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);
1
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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;
}
1
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
25.08.2011, 14:57 4
C++
1
std::cout << std::fstream("input.txt").rdbuf();
0
Заблокирован
Автор 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);
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.08.2011, 14:59 6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
чем эта конструкция от моей отличается???
ничем но у вас осталось от ТС
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
# include <iostream> // класс для работы с вводом-выводом
# include <fstream>
#include <conio.h> // класс для работы с файлом
# include <string> // класс для работы со строками
//-------------------Код программы для первой задачи----------
void main()
что не есть правильно
0
Заблокирован
Автор FAQ
25.08.2011, 15:06 7
Цитата Сообщение от Jupiter Посмотреть сообщение
но у вас осталось от ТС
- я всего лишь код ТС доработал, в коменты не вчитывался

Цитата Сообщение от lexflax Посмотреть сообщение
#include <conio.h> // класс для работы с файлом
- lexflax, посмотри тут http://ru.wikipedia.org/wiki/Conio.h
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
26.08.2011, 13:11  [ТС] 8
while (inf.eof()) что означает eof???
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
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())
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
26.08.2011, 13:21  [ТС] 10
Цитата Сообщение от grizlik78 Посмотреть сообщение
Это функция, которая возвращает true, если достигнут конец потока. Такое использование (в заголовке цикла while) почти всегда означает ошибку в логике программы.

Добавлено через 1 минуту
Я имею в виду и эти варианты тоже
C++
1
while (inf.eof() == false)
а почему вот эти означают ошибку в логике?
C++
1
while (!inf.eof())
а почему вот эти означают ошибку в логике?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
26.08.2011, 13:23 11
Не обязательно означают. Но чаще всего так и есть.
Потому, что надо проверять успешность операции чтения, а не достижение конца файла. Эту функцию можно вызвать чтобы убедиться, что файл закончился, а не для завершения цикла.
1
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
26.08.2011, 13:30 12
grizlik78, тогда как бы вы в данном случае написали заголовок цикла while ?
0
Заблокирован
Автор FAQ
26.08.2011, 13:35 13
Цитата Сообщение от lexflax Посмотреть сообщение
а почему вот эти означают ошибку в логике?
об ошибке в какой логике ты говоришь?Функция eof возвращает 1 если достигнут конец файла и 0 если конец ещё не достигнут 1 - эквивалентна true 0 - false
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.08.2011, 13:38 14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
об ошибке в какой логике ты говоришь?Функция eof возвращает 1 если достигнут конец файла и 0 если конец ещё не достигнут 1 - эквивалентна true 0 - false
конец файла может встретится раньше чем '\n'
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
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;
}
1
Заблокирован
Автор FAQ
26.08.2011, 13:46 16
Цитата Сообщение от Jupiter Посмотреть сообщение
конец файла может встретится раньше чем '\n'
- можешь пояснить?
в reference eof написано что проверяет поток на достижение его конца, погуглив нашёл что единственный моент косой работы eof когда в текстовом режиме бинарник открываем и встречаем -1. Какое отношение к этому имеет символ перевода на другую строку не пойму...
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.08.2011, 13:51 17
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Какое отношение к этому имеет символ перевода на другую строку не пойму...
по умолчанию getline читает до '\n' которого в строке может не быть
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.08.2011, 13:52 18
Цитата Сообщение от Jupiter Посмотреть сообщение
конец файла может встретится раньше чем '\n'
Наверное вы имели ввиду то, что если произвольных файл открыть как текстовый, то конец файла в текстовом формате (символ с кодом 26) может наступить совершенно неожиданно.
0
237 / 210 / 29
Регистрация: 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/refer... or_voidpt/
Тогда почему если вводим EOF цикл завершается?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
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;
}
1
26.08.2011, 13:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.08.2011, 13:58
Помогаю со студенческими работами здесь

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

Вывод на экран данные из текстового файла
Создайте текстовый файл целых чисел (значения вводятся с клавиатуры). Проанализировав в программе...

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

Не могу разобраться. Чтение и вывод на экран всего содержимого файла .txt на консоль
#include &lt;cstdio&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru