Форум программистов, компьютерный форум, киберфорум
acmades
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

С++ «Неделя четвертая - Работа с текстовыми файлами и потоками - Работа с файлами» #19

Запись от acmades размещена 22.08.2017 в 21:51
Показов 31231 Комментарии 3

Потоки прикольная штука. Вот новое задание:
В этом задании вам предстоит написать две небольшие программы. Каждый пункт - отдельная задача, решение отправляйте в поле с соответствующим номером.
Часть 1

Ваша программа должна считать содержимое файла input.txt и напечатать его на экран без изменений. Гарантируется, что содержимое файла input.txt заканчивается переводом строки.

Пример
input.txt
C++
1
2
3
Kepp calm
and
learn C++
stdout
C++
1
2
3
Kepp calm
and
learn C++
Часть 2

Снова считайте все содержимое файла input.txt, но на этот раз выведите его в файл output.txt . Точно так же гарантируется, что содержимое файла input.txt заканчивается переводом строки.

Пример
input.txt
C++
1
2
3
Kepp calm
and
learn C++
output.txt
C++
1
2
3
Kepp calm
and
learn C++
Моё решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main() {
    ifstream input("input.txt");
    string line;
    ofstream output("output.txt", ios::app);
    while (getline(input, line)) {
        cout << line << "\n"; //закомментируем эту строку, для 2 части
        output << line << "\n"; //закомментируем эту строку, для 1 части
    }
    return 0;
}
В продолжение темы:
Задание:
В файле input.txt записаны вещественные числа, по одному на строчку. На стандартный вывод напечатайте эти числа в том же порядке, по одному на строке, но сделайте так, чтобы у каждого из них было ровно три знака после десятичной точки (округление производится по стандартным правилам, т.е. 0.1234 округляется до 0.123, а 0.1235 до 0.124).
Пример ввода
C++
1
2
3
4
5
6
5
0.34567
10.4
3.33353
3.333
3.3
Пример вывода
C++
1
2
3
4
5
6
5.000
0.346
10.400
3.334
3.333
3.300
Моё решение:
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
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
 
int main() {
    ifstream input("input.txt"); //входной поток из файла
    string line;
    while (getline(input, line)) { //пока не кончатся строки
        //тут я порылся в инете(с мыслью конвертировать строки в число), и нашел интересность ниже
        double dline = atof(line.c_str()); //любопытная штукенция для конвертации
        cout << fixed << setprecision(3); //как положено, 3 знака после точки
        cout << dline << "\n";
    }
    return 0;
}
//или можно было так
/*int main() {
    ifstream input("input.txt");
    double line;
    cout << fixed << setprecision(3);
    while (input) {
        input >> line;
        cout << line << endl;
    }
    return 0;
}*/
И ещё задание:
В первой строке файла input.txt записаны два числа N и M. Далее в файле находится таблица из N строк и M столбцов, представленная в формате CSV (comma-separated values). Такой формат часто используется для текстового представления таблиц с данными: в файле несколько строк, значения из разных ячеек внутри строки отделены друг от друга запятыми. Ваша задача — вывести данные на экран в виде таблицы, размер ячейки которой равен 10, соседние ячейки отделены друг от друга пробелом. После последней ячейки пробела быть не должно. Гарантируется, что в таблице будет ровно N строк и M столбцов, значение каждой из ячеек — целое число.
Пример ввода
C++
1
2
3
2 3
1,2,3
4,5,6
Пример вывода
C++
1
2
         1          2          3
         4          5          6
Моё решение:
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
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
int main() {
    ifstream input("input.txt");
    string lines;
    int N, M;
    //подумал. что надо сначала перевести первые 2 параметра из строки в число и сначала сделал так...
    /*getline(input, lines, ' '); //взять строку до пробела
    N = atoi(lines.c_str()); //перевести её в число
    getline(input, lines); //взять оставшееся и
    M = atoi(lines.c_str());*/ //тоже перевести в число
    //но оказалось можно и проще
    input >> N >> M; // )))))
    input.ignore(1); //еще перевод строки остался, его игнорируем(иначе выведется)
    for (int i = N; i > 0;--i) {
        for (int z = M; z > 1; --z) {
            getline(input, lines, ',');
            cout << setw(10) << lines << " ";
        }
        getline(input, lines);
        cout << setw(10) << lines << endl;
    }
    return 0;
}
Продолжение смотрите в блоге...
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 3
Комментарии
  1. Старый комментарий
    atof(.c.str) надо взять на заметку, у вас писанины меньше)
    Запись от Albatrosso размещена 23.08.2017 в 08:34 Albatrosso вне форума
  2. Старый комментарий
    Аватар для Avazart
    Файл имеет свойство кончатся ...
    Это надо проверять, нужно проверять состояние потока при чтении.

    atof(.c.str) надо взять на заметку, у вас писанины меньше)
    Мое мнение позорная ф-ция.
    Нельзя достоверно узнать произошло ли преобразование успешно или возникла ошибка.
    Запись от Avazart размещена 23.08.2017 в 13:33 Avazart вне форума
  3. Старый комментарий
    Цитата Сообщение от Avazart
    Файл имеет свойство кончатся ...
    Это надо проверять, нужно проверять состояние потока при чтении.
    А вот так разве не проверяется?
    C++
    1
    
    while (getline(input, line))
    или
    C++
    1
    
    while (input)
    А про "интересную" функцию atof(line.c_str()) сомневался сначала, но переводит она нормально. Тем более в условии написано что в файле именно вещественные числа и ничего больше. Иначе бы еще условие было на корректность данных.
    Неужели эта строчка надежнее?
    C++
    1
    
    input >> line;
    Запись от acmades размещена 24.08.2017 в 13:06 acmades вне форума
 
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru