Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
-30 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 802

Не могу вывести текст с файла в консоль

30.01.2016, 05:41. Показов 2589. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа выводит только первое слово текста, помогите.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    ifstream inFile;
    inFile.open("list.txt");
 
    // Check for Error
    if (inFile.fail())
    {
        cerr << " Error opening File" << endl;
        exit(1);
    }
    string S;
/*  while (!inFile.eof())      // Выводит только последнее слово 
    {
        inFile >> S;
    }
    int v = S.capacity();
    int x = S.size();
    cout << S << " " << x << " " << v << endl << endl;*/
    inFile >> S;
    int x = S.size();
    cout << S << " " << x << endl << endl;// Выводит только первое слово
    
    inFile.close();
 
    system("pause");
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.01.2016, 05:41
Ответы с готовыми решениями:

Ввести и вывести текст на консоль
Нужно простая работа с текстом нужно ввести текст(с пробелами т.е. cin - неподойдет) и вывести введенный текст также с пробелами со всем....

Вывести в консоль русский текст
Здравствуйте. Я понимаю что тема поднималась не один десяток раз, но все же... Установил компилятор Qt. И строку &quot;Привет...

Не могу вывести программу в консоль С++
Работаю в версии 2010 Express, код делался в 2012 версии, как подкоректировать код, чтобы можно было запускать с 2010?? Помогите...

17
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
30.01.2016, 07:54
gogaloh, ifstream - это ж входной поток, те для ввода, а не вывода

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 <cstdio>
#include <cstdlib>
 
int main()
{
    FILE* fp = fopen("list.txt", "r"); // r - read mode
    if(!fp) {
        perror("File opening failed");
        return EXIT_FAILURE;
    }
 
    int c; // note: int, not char, required to handle EOF
    while ((c = fgetc(fp)) != EOF) { // typical file reading loop
       putchar(c);
    }
 
    if (ferror(fp))
        puts("I/O error when reading");
    else if (feof(fp))
        puts("End of file reached successfully");
 
fclose(fp);
}
имхо работа с файлами в Си-стайл проще.
в С++ 14 подобное предусмотрено, так что это С++
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.01.2016, 11:40
gogaloh, Какова задача-то?
0
-30 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 802
30.01.2016, 11:55  [ТС]
ForEveR, программа должна совершать некоторые действия с текстом. Я не знал как весь текст ввести в программу, сейчас понял, копирую текст в блокнот(файл) и уже из него ввожу в программу.
Оцените, вариант простой, но рабочий. Если подскажите что-нибудь изящнее, буду примногоблагодарен.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    ifstream inFile;
    inFile.open("list.txt");
 
    // Check for Error
    if (inFile.fail())
    {
        cerr << " Error opening File" << endl;
        exit(1);
    }
    string S;
 
    if (inFile.is_open())
    {
        while (!inFile.eof())
        {
            getline(inFile, S);
            cout << S << endl;
        }
        inFile.close();
    }
    else
        cout << " Unable to open file." << endl;
    cout << S << endl << endl;
 
    system("pause");
    return 0;
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.01.2016, 12:12
=gogaloh, Если разбивать не надо - просто считываем все символы из потока ввода.
C++
1
std::string S = std::string(std::istreambuf_iterator<char>(inFile), std::istreambuf_iterator<char>());
1
-30 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 802
30.01.2016, 21:26  [ТС]
ForEveR, Спаси Боже.

Добавлено через 8 часов 53 минуты
Наверное такое может происходить только со мной, программа работала как надо, а сейчас стала какой-то ленивой.
Строка S должна дважды выводится в консоль, но она это делает только один раз
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    ifstream inFile;
    inFile.open("list.txt");
 
    // Check for Error
    if (inFile.fail())
    {
        cerr << " Error opening File" << endl;
        exit(1);
    }
    string S;
 
    if (inFile.is_open())
    {
        while (!inFile.eof())
        {
            getline(inFile, S);
            cout << S << endl;
        }
 
    }
    else
        cout << " Unable to open file." << endl;
 
    cout << S << endl << S.size() << endl; // В этом месте содержимое строки должно второй раз выводится в консоль, но в это месте ничего не выводится
    inFile.close();
 
    system("pause");
    return 0;
}
Может кто-нибудь сможет мне объяснить, почему программа обленилась.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
30.01.2016, 21:48
Цитата Сообщение от gogaloh Посмотреть сообщение
Может кто-нибудь сможет мне объяснить, почему программа обленилась.
'\n' в конце строки, поэтому так работает. Или убрать, или так читать:
C++
1
2
3
4
5
6
7
        while (!inFile.eof())
        {
            getline(inFile, S);
            cout << S << endl;
            if (inFile.peek() == EOF)
                break;
        }
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
30.01.2016, 21:51
gogaloh,
попробуйте так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    ifstream inFile;
    inFile.open("list.txt");
 
    // Check for Error
    if (inFile.fail())
    {
        cerr << " Error opening File" << endl;
        exit(1);
    }
    string S;
 
    if (inFile.is_open())
    {
        while (!inFile.eof())
        {
            if(getline(inFile, S))
            getline(inFile, S);
            cout << S << endl;
        }
 
    }
    else
        cout << " Unable to open file." << endl;
 
    cout << S << endl << S.size() << endl; // В этом месте содержимое строки должно второй раз выводится в консоль, но в это месте ничего не выводится
    inFile.close();
 
    system("pause");
    return 0;
}
Добавлено через 42 секунды
nd2, Почему вам нельзя + поставить??
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
30.01.2016, 21:58
вот что у нас на выходе из цикла
и перед выходом из цикла
ответил?
"3333333333" - это последняя строка, которую я написал.
переменная S ваша
те последняя строка пустая
Миниатюры
Не могу вывести текст с файла в консоль   Не могу вывести текст с файла в консоль  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
30.01.2016, 22:01
Цитата Сообщение от nd2 Посмотреть сообщение
или так читать:
А лучше так:
C++
1
2
3
4
5
        while (inFile.peek() != EOF)
        {
            getline(inFile, S);
            cout << S << endl;
        }
Цитата Сообщение от anti-k Посмотреть сообщение
nd2, Почему вам нельзя + поставить??
Рано.
0
-30 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 802
30.01.2016, 22:02  [ТС]
nd2, спасибо, работает как надо, хотя я и не понимаю что здесь происходит.
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
30.01.2016, 22:06
nd2,
Цитата Сообщение от nd2 Посмотреть сообщение
C++
1
2
3
4
5
6
7
while (!inFile.eof())
 {
 getline(inFile, S);
 cout << S << endl;
 if (inFile.peek() == EOF)
 break;
 }
да, так работает

Добавлено через 3 минуты
Цитата Сообщение от gogaloh Посмотреть сообщение
nd2, спасибо, работает как надо, хотя я и не понимаю что здесь происходит.
строка \n
строка \n
EOF
что последнее из файла вы прочтете, если читаем до \n?
правильно - прочтем, то, что между последним \n и EOF, те ничего
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
30.01.2016, 22:12
gogaloh,
Цитата Сообщение от gogaloh Посмотреть сообщение
спасибо, работает как надо, хотя я и не понимаю что здесь происходит.
Нажмите несколько раз delete в конце вашего файла, сохраните и перекомпилируйте, и сразу все поймете
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
30.01.2016, 22:17
Цитата Сообщение от gogaloh Посмотреть сообщение
хотя я и не понимаю что здесь происходит.
Когда '\n' в конце строки, то getline() прочитается строку до '\n', '\n' извлечёт и отбросит, но флаг eof не будет установлен, поэтому выхода из цикла, в твоём коде, не будет, будет ещё чтение, перед которым строка будет очищена (""). Читать там больше нечего, поэтому строка так и останется пустой.
0
-30 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 802
30.01.2016, 22:34  [ТС]
nd2, SergioO, anti-k, господа, спасибо за участие, но уже поздно завтра с утра еще раз все прочту, приятных сновидений.
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
31.01.2016, 08:35
gogaloh, пожалуйста.
осваивайте отладчик - помогает.
0
-30 / 27 / 1
Регистрация: 14.03.2015
Сообщений: 802
31.01.2016, 08:53  [ТС]
SergioO, Очень помогает, но не всегда и не таким как я.
В Вашем сообщении со скриншетами(миниатюрки, иконки) видно, что при пошаговой отладке у вас снизу экрана показывается содержание переменных, строк, и при каждом шаге можно видеть изменения.
Мне, чтобы увидеть изменения нужно наводить курсор на имя переменной, появляется маленькое окно и в нем видно, что находится в переменной.
Как настроить, чтобы было как у Вас?
0
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
31.01.2016, 11:57
gogaloh, я ничего не настраивал специально. VS 2015 Community установил и так сразу было. Захожу в главное меню "Отладка -> Шаг с обходом (F10)".
Зайдите в "Отладка -> Прамаетры -> Окно вывода (может в Общие)".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2016, 11:57
Помогаю со студенческими работами здесь

Вывести в консоль и псевдографику и русский текст вместе
подскажите пожалуйста как в консоль вывести и псевдографику и русский текст вместе???

Из текстового файла на консоль текст через широкую строку
Всем привет! Как правильно вывести текст на кириллице из файла в консольную строку с использованием wstring? #include...

Что не так с setlocale? (вывести на консоль текст русскими буквами)
Помогите! Я новичок на сайте так как и в программировании. В своей программе не могу вывести на консоль русскими буквами, то что было...

Не могу разобраться с чтением файла и последующего вывода в консоль
У меня задание. Из файла Hello.txt вывести текст (конкретно &quot;Hello world!&quot;). Поиск по форуму привел меня к такому коду: #define...

Как вывести матрицу из файла в консоль?
У меня есть 3 матрицы 3 на 3. Возник вопрос как их прописывать в файле и затем как их ввести в консоль из файла в виде матриц?


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru