C++ поточный ввод-вывод и работа с файлами
Итак, в рамках этой статьи мы вспомним как у нас пишется Hello world осуществляется потоковый ввод-вывод, который большинство инженеров Роснано называют просто cin-cout, вспомним как читать и писать в файл и ещё несколько моментов. Возможно чуть позже сделаю отдельный раздел для вот этих вот всех базовых вещей и «школьных» задачек, которые не направлены на решение каких-либо конкретных вопросов.
Итак, запускаем бумажный самолетик любую IDE. В моём случае это 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; //возвращаем значение главной функции
}
Результаты нашего баловства:
Ну и, пожалуй, под завершение статейки — сделаем цикл, чтобы вдоволь натыкать цыферки (завершение цикла по вводу символа):
#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; //возвращаем значение главной функции
}
Ну и, само собой, результат:









