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

Обработка текстовых файлов (fstream, ifstream, ofstream)

14.05.2020, 15:28. Показов 2913. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан текстовый файл 1.txt, содержащий целые числа, записанные в несколько строк:
1 2 3 4 5 6 7
7 6 5 4 3 2 1
0 1 2 3 4 5 6
6 5 4 3 2 1 0
Вывести на экран нечётные строки.
Программа не должна запрашивать у пользователя ввода количества строк.
У меня получается вывести только все строки.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2020, 15:28
Ответы с готовыми решениями:

ifstream/ofstream/fstream
#include <fstream> fstream autosave; autosave.open("...autosave.txt"); char x; autosave << x; cout >>...

Нужно пояснить работу с потоками ofstream, ifstream, fstream
Лектор не поставил коментариев, а я сейчас как дурак сижу разшифровую. Помогите, особенно на функции "void testofiles()" ...

ifstream ofstream
как работают данные файловые операции, объясните пожалуйста куда происходит запись ена жёстком диске

21
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.05.2020, 18:09
ArtieMLG, не дублируйте темы. Вам уже всё написали:
Построчное считывание цифр и вывод на экран
в цикле делается счётчик и если значение нечётное, строка выводится на печать
1
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 22
14.05.2020, 18:18  [ТС]
Просто вы используете методы, которые мы не проходили в универе и ваша программа выводит только суммы с нечётных строк, если я правильно понял. Поэтому Я хотел бы научиться просто считать строки с цифрами из файла и вывести на экран нечётные строк т.к. у меня есть ещё похожие задания. Если вам не трудно, пожалуйста, покажите мне решение. Спасибо вам за помощь.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.05.2020, 19:19
Цитата Сообщение от ArtieMLG Посмотреть сообщение
выводит только суммы с нечётных строк, если я правильно понял
выводит согласно условию:
Цитата Сообщение от ArtieMLG Посмотреть сообщение
Найти суммы четных чисел в каждой нечетной строке и вывести их на экран
Цитата Сообщение от ArtieMLG Посмотреть сообщение
пожалуйста, покажите мне решение
принцип я уже Вам показал, потом ещё раз рассказал:
Цитата Сообщение от Yetty Посмотреть сообщение
в цикле делается счётчик и если значение [счётчика] нечётное, строка выводится на печать
что именно Вам непонятно ? как сделать счётчик ? как напечатать строку ?
1
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 22
14.05.2020, 19:28  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
что именно Вам непонятно ? как сделать счётчик ? как напечатать строку ?
Как сделать счётчик? На самом деле Я не знаю как сделать счётчик. Я могу сделать счётчик только через цикл for с ручным вводом количества наличия строк в файле, но преподавателя такой расклад не устраивает. Покажите пожалуйста счётчик который просто считывает строки с цифрами и выводит нечётные строки на экран. Без векторов и без stringstream если такое возможно, потому что такое мы не проходили.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.05.2020, 19:36
ArtieMLG, начинайте сами что-то делать, тем более что код где всё расписано перед Вами
Цитата Сообщение от ArtieMLG Посмотреть сообщение
Я не знаю как сделать счётчик
он же уже сделан в теме:
Построчное считывание цифр и вывод на экран
для счётчика используется переменная i

C++
1
2
3
4
5
int i=1;
while(getline(numbers, line))
{
    i++;
}
1
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 22
14.05.2020, 20:05  [ТС]
впервые такой цикл вижу, сразу и не понял, всегда через for делал

Добавлено через 20 минут
А можно ли как нибудь написать такой цикл без использования stringstream и без векторов?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.05.2020, 20:13
ArtieMLG, Вам для простого вывода нечётных строк не нужен stringstream (он читает числа из считанной строки) и не нужен vector (в нём хранятся суммы, чтобы позже их можно было вывести на печать)

всё что требуется для вывода нечётных строк - прочитать их (каждая стока временно сохраняется в переменной line), как в цикле выше (это цикл построчного чтения файла) и проверяя значение счётчика на чётность, вывести нечётные строки на печать.
1
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 22
14.05.2020, 20:34  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
всё что требуется для вывода нечётных строк - прочитать их (каждая стока временно сохраняется в переменной line), как в цикле выше (это цикл построчного чтения файла) и проверяя значение счётчика на чётность, вывести нечётные строки на печать.
Вы имеете ввиду ifstream? Проблема в том, что у меня не получается построчно вывести на экран. Либо всё в одну строку, либо всё в один столбик, либо выводится всё, либо ничего не выводится, но не чётные числа или нечётные. Как мне поставить условие для вывода нечётной строки, если это цикл while?

Добавлено через 12 минут
А вообще Я имел ввиду, можно ли написать программу, которую Я изначально задал без stringstream и векторов?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.05.2020, 20:37
ArtieMLG, с Вами достаточно тяжко
открыли файл для чтения:
C++
1
ifstream in("1.txt");
и читаете его построчно:
C++
1
2
3
4
5
6
7
int i=1;
string line;
while(getline(in, line))
{
          // <--- сюда ВАм нужно записать условие: если i нечётное, печатаем line
    i++;
}
1
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 22
14.05.2020, 20:49  [ТС]
В этом и вопрос, как мне записать условие, если используется цикл while, когда, как в for можно это указать? Например
C++
1
2
3
4
5
6
7
for(i=0;i<10;i++)
{
if(i%2==0) //тут мы указываем чётную строку, потому что мы отталкиваемся от i<10;
{
cout<<line;
}
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.05.2020, 20:56
ArtieMLG, что до сих пор не понятно ? из цикла for перенесите строку с условием в цикл while
1
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 22
14.05.2020, 21:38  [ТС]
Ура! Есть прогресс! Я получил, что хотел! Только у меня строки на своих местах выводятся а не друг за другом.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.05.2020, 22:58
Цитата Сообщение от ArtieMLG Посмотреть сообщение
Только у меня строки на своих местах выводятся а не друг за другом.
сбросьте код и приведите пример вывода
1
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 22
14.05.2020, 23:02  [ТС]
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
39
40
#include<iostream>
#include<fstream>
#include <string>
#include <sstream>
 
using namespace std;
 
int main()
{
    int x, i=1, n = 0;
    string line;
    ifstream numbers;
    ofstream numbers2;
    numbers.open("1.txt");
    numbers2.open("2.txt");
    if (!numbers) return 1;
    while (getline(numbers, line))
    {
        stringstream ss(line);
        while (ss >> x)
        {
            numbers >> x;
            if (i % 2 == 1)
            {
                if (x % 2 == 0)
                {
                    cout << x << ' ';
 
                }
 
            }
        }
        cout << endl;
        i++;
 
    }
    numbers.close();
    numbers2.close();
    return 0;
}
Вывод:
6 4 2

6 4 2 0

Он через строку выводит.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.05.2020, 23:20
уберите строку 22
0
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 22
14.05.2020, 23:24  [ТС]
Я понял почему он выводит наоборот числа. Почему он выводит строки через строку? Т.Е. почему он выводит чётные строки в невидимом виде?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.05.2020, 23:33
строку убрали ?
Цитата Сообщение от ArtieMLG Посмотреть сообщение
Почему он выводит строки через строку
Вы же все строки читаете. будет выводить без пробелов если поставите в строке 33 так:
C++
1
if (i%2==1) cout << endl;
Цитата Сообщение от ArtieMLG Посмотреть сообщение
Я понял почему он выводит наоборот числа
какие ещё числа наоборот ?
1
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 22
15.05.2020, 00:19  [ТС]
Я нашёл решение
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>
#include <sstream>
 
using namespace std;
 
int main()
{
    int x, i=1, n = 0;
    string line;
    ifstream numbers;
    ofstream numbers2;
    numbers.open("1.txt");
    numbers2.open("2.txt");
    if (!numbers) return 1;
    while (getline(numbers, line))
    {
        if (i % 2 == 1)
        {
            stringstream ss(line);
            while (ss >> x)
            {
                if (x % 2 == 0)
                {
                    cout << x << ' ';
 
                }
 
            }cout << endl;
        }i++;
        
 
    }
    numbers.close();
    numbers2.close();
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Yetty Посмотреть сообщение
какие ещё числа наоборот ?
Я заметил что числа выводились наоборот, и вы сказали мне удалить строку 22. Наверно Я до этого намудрил что-то. Думал вы то же самое имеете ввиду.

Добавлено через 35 минут
Почему то он строки суммирует, а надо чтобы он суммировал числа в строке по отдельности
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
39
40
41
42
43
44
45
46
#include<iostream>
#include<fstream>
#include <string>
#include <sstream>
 
using namespace std;
 
int main()
{
    int x, i=1, n = 0,sum=0;
    string line;
    ifstream numbers;
    ofstream numbers2;
    numbers.open("1.txt");
    numbers2.open("2.txt");
    if (!numbers) return 1;
    while (getline(numbers, line))
    {
        if (i % 2 == 1)
        {
            stringstream ss(line);
            while (ss >> x)
            {
 
                if (x % 2 == 0)
                {
                    cout << x << ' ';
                    sum += x;
 
                }
 
            }
            cout << endl;
        }
        if (i % 2 == 1)
        {
            cout << sum << endl;
        }
        i++;
 
    }
 
    numbers.close();
    numbers2.close();
    return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
15.05.2020, 00:59
Лучший ответ Сообщение было отмечено ArtieMLG как решение

Решение

Цитата Сообщение от ArtieMLG Посмотреть сообщение
Почему то он строки суммирует, а надо чтобы он суммировал числа в строке по отдельности
смотрите код в теме:
Построчное считывание цифр и вывод на экран
и находите различия со своим вариантом
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2020, 00:59
Помогаю со студенческими работами здесь

C++ файлы ifstream/ofstream
Доброе время суток нужна небольшая помощь с записью/считыванием из файла вообщем при считывание из файла eof() не определяет конца файла и...

Перегрузка ifstream и ofstream?
Есть класс //test.h cass test { private: int i; string st; public:

Работа с потоками ofstream/ifstream
Добрый вечер! Помогите, пожалуйста, с задачей! Дан класс: class data { char str; //дата представлена в виде строки “mm/dd/yy” ...

Работа с кириллицей в ofstream/ifstream
Как сохранять русские буквы в ofstream и выводить русские буквы в через ifstream ?

Сокращенная запись ifstream и ofstream
#include &lt;fstream&gt; using namespace std; int main() { fstream I(&quot;input.txt&quot;), O(&quot;output.txt&quot;, 2); что означает второй...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru