C++ поточный ввод-вывод и работа с файлами
C++ поточный ввод-вывод и работа с файлами

C++ поточный ввод-вывод и работа с файлами

23 ноября 2022       147 просмотров

Итак, в рамках этой статьи мы вспомним как у нас пишется Hello world осуществляется потоковый ввод-вывод, который большинство инженеров Роснано называют просто cin-cout, вспомним как читать и писать в файл и ещё несколько моментов. Возможно чуть позже сделаю отдельный раздел для вот этих вот всех базовых вещей и «школьных» задачек, которые не направлены на решение каких-либо конкретных вопросов.

Итак, запускаем бумажный самолетик любую IDE. В моём случае это Dev-C++. Зачем? Не важно — для наших целей её более чем достаточно.

Dev-C++

Создаём проект и напишем банальное и пошлое «Hello world»:

#include <iostream>
#include <stdlib.h> //это нужно для добавления паузы, чтобы окно не закрылось сразу после выполнения программы

using namespace std; //подключим пространство имён, чтобы много не писать) 

int main () {
	cout << "Hello world" << endl; //выводим текст
	system ("pause"); //добавляем паузу
	return 0; //возвращаем значение главной функции
}

Нетрудно догадаться, что у нас получится:

банальшина

Что ж, сделаем ещё один небольшой шаг — добавим ввод:

#include <iostream>
#include <stdlib.h> //это нужно для добавления паузы, чтобы окно не закрылось сразу после выполнения программы

using namespace std; //подключим пространство имён, чтобы много не писать) 

int main () {
	string name; //сюда запишем строку, имя, допустим
	cout << "Kak vas zovut?" << endl;
	cin >> name; //забираем
	cout << "Poshel nahui," << name <<" !" << endl; //выводим текст
	system ("pause"); //добавляем паузу
	return 0; //возвращаем значение главной функции
}

Результат:

чуть больше кода

Следующим примером покажу различные варианты использования уже перечисленного:

#include <iostream>
#include <stdlib.h> //это нужно для добавления паузы, чтобы окно не закрылось сразу после выполнения программы

using namespace std; //подключим пространство имён, чтобы много не писать) 

int main () {
	double x, y; //допустим, мы будем использовать 2 числа
	cout << "Vvedite pervoe chislo" << endl;
	cin >> x; //забираем
	cout << "Vvedite vtoroe chislo" << endl;
	cin >> y; //забираем
	cout << "Summa chisel =" << x+y << endl << "Vvedite 2 chisla cherez probel" << endl; //да, так можно, для этого даже math.h не нужно подключать
	cin >> x >> y; //оба забираем
	cout << "Raznost' chisel =" << cout.width (5) << x-y << endl; //тут мы не использовали пробел, а задали отступ через width
	system ("pause"); //добавляем паузу
	return 0; //возвращаем значение главной функции
}

Результат:

высшая математика

Это основные моменты которые используются при поточном вводе и выводе, сейчас мы начнём гадить в файлики:

#include <iostream>
#include <fstream> //для работы с файлами
#include <stdlib.h> //это нужно для добавления паузы, чтобы окно не закрылось сразу после выполнения программы

using namespace std; //подключим пространство имён, чтобы много не писать) 

int main () {
	double x, y; //допустим, мы будем использовать 2 числа
	cout << "Vvedite 2 chisla" << endl;
	cin >> x >> y;
	cout << "x+y =" << x+y << endl << "x-y =" << x-y << endl << "Rezul'tati zapisani v result.txt" << endl; //высираем текст
	ofstream filewr; //объявляем функцию для записи файлов
	filewr.open ("result.txt", ios::app); //открываем файл, указываем имя и режим записи, в данном случае — append, т.е. мы будем добавлять, не затирая старое
	filewr << "Results:" << endl << "x+y =" << x+y << endl << "x-y =" << x-y << endl << endl; //пишем в файл
	filewr.close (); //не забываем закрыть файл
	system ("pause"); //добавляем паузу
	return 0; //возвращаем значение главной функции
}

Результаты нашего баловства:

<nobr>как-то</nobr> так

результаты

Ну и, пожалуй, под завершение статейки — сделаем цикл, чтобы вдоволь натыкать цыферки (завершение цикла по вводу символа):

#include <iostream>
#include <fstream> //для работы с файлами
#include <stdlib.h> //это нужно для добавления паузы, чтобы окно не закрылось сразу после выполнения программы

using namespace std; //подключим пространство имён, чтобы много не писать) 

int main () {
	double x, y; //допустим, мы будем использовать 2 числа
	int schet = 1; //просто чтобы добавить номер результата
	char breakchar; //символ остановки цикла
	cout << "Nazmite Enter chobi nachat'. Dlya zaversheniya — vvedite 'q'" << endl;
	while ( (breakchar=getchar ())!='q') //пока не введём «q» — программа будет выполняться
	{
		cout << "Vvedite 2 chisla" << endl;
		cin >> x >> y;
		cout << "x+y =" << x+y << endl << "x-y =" << x-y << endl << "Rezul'tati zapisani v result.txt" << endl; //высираем текст
		ofstream filewr; //объявляем функцию для записи файлов
		filewr.open ("result.txt", ios::app); //открываем файл, указываем имя и режим записи, в данном случае — append, т.е. мы будем добавлять, не затирая старое, кстати, если нужно затереть, то можно использовать out
		filewr << "Results" << schet << ": " << endl << "x+y =" << x+y << endl << "x-y =" << x-y << endl << endl; //пишем в файл
		filewr.close (); //не забываем закрыть файл
		schet++; //инкрементируем «счетчик»
	}
	system ("pause"); //добавляем паузу
	return 0; //возвращаем значение главной функции
}

Результат:

хватит на сегодня

записанные результаты

Как-то так на сегодня…
Возможно такие вот статейки для разминки и для начинающих буду делать почаще, посмотрим.

upd Глянул на свою писанину дома вечером и понял, что пока быстренько набрасывал код во время обеденного перерыва на работе — подъебался на последнем. Не удаляю, чтобы было видно что я исправил и почему (лишний счёт и запись в файл, даже после того, как мы ввели q):

#include <iostream>
#include <fstream> //для работы с файлами
#include <stdlib.h> //это нужно для добавления паузы, чтобы окно не закрылось сразу после выполнения программы

using namespace std; //подключим пространство имён, чтобы много не писать) 

int main () {
	double x, y; //допустим, мы будем использовать 2 числа
	int schet = 1; //просто чтобы добавить номер результата
	char breakchar; //символ остановки цикла
	cout << "Nazmite Enter chobi nachat'. Dlya zaversheniya — vvedite 'q'" << endl;
	while ((breakchar=getchar ())!='q') //пока не введём «q» — программа будет выполняться
	{
		cout << "Vvedite 2 chisla" << endl;
		cin >> x >> y;
		if (x!=0) //если мы вводим q, то x обращается в ноль, т.к. не читает нечисловое значение, следовательно, если x — не ноль, ты мы продолжаем
		{
			cout << "x+y =" << x+y << endl << "x-y =" << x-y << endl << "Rezul'tati zapisani v result.txt" << endl; //высираем текст
			ofstream filewr; //объявляем функцию для записи файлов
			filewr.open ("result.txt", ios::app); //открываем файл, указываем имя и режим записи, в данном случае — append, т.е. мы будем добавлять, не затирая старое, кстати, если нужно затереть, то можно использовать out
			filewr << "Results" << schet << ": " << endl << "x+y =" << x+y << endl << "x-y =" << x-y << endl << endl; //пишем в файл
			filewr.close (); //не забываем закрыть файл
			schet++; //инкрементируем «счетчик»
		}
		else
		{
			cout << "Zakanchivaem" << endl; //а если всё остальное (ноль) — заканчиваем
		}
	}
	system ("pause"); //добавляем паузу
	return 0; //возвращаем значение главной функции
}

Ну и, само собой, результат:

fix

fix