Справочник от Автор24
Поделись лекцией за скидку на Автор24

Ввод и вывод данных

  • ⌛ 2017 год
  • 👀 791 просмотр
  • 📌 759 загрузок
  • 🏢️ НИУ МЭИ
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Ввод и вывод данных» pdf
Ввод и вывод данных Курс «Разработка ПО систем управления» Кафедра управления и информатики НИУ «МЭИ» Осенний семестр 2017 г. Функции printf() и scanf() • Форматная строка аналогична MATLAB. • Но только для скалярных значений. • Корректность не проверяется, результат непредсказуем. • Функция printf () не работает со string напрямую: string hello = "hello"; printf ( "%s", hello . c_str() ); • Подробная справка по форматной строке: [cppref]. • float value; scanf ( "%f", &value ); • Некорректный вызов приведет к порче памяти! Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 2 Работа с файлами в C Тип-указатель (не разыменовывается), обозначающий открытый файл. Режим доступа [cppref]: " r " — чтение текста; "w" — перезапись файла; "a" — дозапись в конец. FILE* file = fopen ( "name.ext", "r" ); fscanf ( file, "%d", &number ); string line(120, '\0'); fgets ( line . data(), line . size(), file ); fprintf ( file, "%4.2f", 3.14 ); fputs ( line . c_str(), file ); 1. Строка из 120 символов '\0'. 2. Это специальный символ «конец строки». fseek ( file, 0, SEEK_END ); long position = ftell ( file ); fclose ( file ); Осень 2017 г. Перемещение на 0 символов от конца, то есть к концу файла. См. также [cppref]. © Кафедра УиИ НИУ «МЭИ» 3 Ввод и вывод в C++ (1) • #include • Поток (stream) — тип данных,представляющий нечто, откуда можно читать данные (поток ввода) или куда можно записывать данные (поток вывода): • ifstream — тип потоков ввода из файла (см. далее); • ostringstream — тип потоков для вывода в строку (см. далее); • cin — переменная-поток стандартного ввода (обычно с клавиатуры); • cout — переменная-поток стандартного вывода (обычно на экран). Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 4 Ввод и вывод в C++ (2) • Читают оператором >>: cin >> x; • Выводят оператором <<: cout << "hello!"; • Эти операторы поддерживаются для встроенных типов. • Можно определить их для собственных типов, но это выходит за рамки курса. • Поток может быть текстовым или двоичным — код работы с ним не меняется (оператор будет читать или писать в другом формате сам). • При вводе из текстовых потоков разделитель значений — один и более пробельных символов (пробел, перевод строки, табуляция). Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 5 Файловый в/в С++ Или: ifstream input; input . open ( "file.txt" ); ▪ Ничего или ios::out. ▪ ios_base :: ate — дописывать в конец, • Append (Output) в Pascal; ▪ ios_base :: trunc — очистить файл перед записью, • Ввод: • Truncate (Output) в Pascal. ifstream input ( "file.txt" ); input >> temperature; • Вывод: ofstream output ( "file.txt", режим ); output << "Result: " << result << '\n'; • Закрытие — автоматически или output . close(). • Работа с файлами подобна работе с cin и cout. Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 6 Потоки в памяти, или «как превратить строку в число?» Из строки вычитываются слова, разделенные пробелами. • string input; getline(cin, input); stringstream source(input); size_t count = 0; for (string word; source >> word; ++count); cout << "Word count: " << count << '\n'; Тело цикла пустое: • int parse ( string text ) { ++count и есть подсчет слов. stringstream stream ( text ); int result; stream >> result; • stringstream Чтение и запись. return result; • istringstream Только чтение. } • ostringstream Только запись. Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 7 Тонкость: ввод целых строк Содержимое потока: (что остается считать) 4 • size_t count; cin >> count; string line; getline(cin, line); // line == "" 2 \n h i \n \n h i \n h i \n • getline() считывает до '\n'. Он встретился сразу → считано 0 символов. • Нужно считать из потока этот лишний '\n', варианты: • cin.ignore(); // проигнорирован 1 символ • getline(cin, line); // проигнорирован перевод строки getline(cin, line); // считана следующая строка: "hi\n" Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 8 Форматный вывод Действует на cout все время после установки. double value = 12.34567; ▪ cout << setprecision ( 2 ); ▪ cout << value // 12 …значащих цифр << fixed << value // 12.35 …цифр после запятой << scientific << value // 1.23e+01 …цифр после запятой в мантиссе << defaultfloat << value; // 12 Действуют только на следующее выводимое значение. Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 9 Форматный вывод (продолжение) • cout << setw (15) << setfill ( '.' ) << left << "Code:" << setw (4) << setfill ( '0' ) << right << 12; • Code:..........0012 • cout << endl; • cout << '\n'; cout . flush(); Осень 2017 г. Форматный вывод в C++ устроен сложнее, чем в C, но на самом деле он гибче, т. к. параметры форматирования легко менять во время работы. © Кафедра УиИ НИУ «МЭИ» 10 Параметры командной строки Приглашение (prompt). $ g++ -o program main.cpp Имя программы (исполняемого файла). Аргументы командной строки. • Программа может получить аргументы, с которыми вызвана. • И имя, под которым вызвана (как аргумент № 0). • Аргументы с дефисами в начале иногда называют опциями (options). Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 11 Разбор параметров командной строки int main ( int argc, char* argv[ ] ) { for (int i = 0; i < argc; i++) { cout << "argv[" << i << "] = " << argv[ i ] << endl; } } $ ./program -o option 123 --long-option=value -ab argv[0] = ./program argv[1] = -o argv[2] = option argv[3] = 123 argv[4] = --long-option=value argv[5] = -ab Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» Для многих программ это эквивалентно -a -b, но это их внутренняя логика! 12 Что значит char* argv[] ? • argv [ ] значит, что argv — это массив. • …массив значений аргументов (argument values). • Количество элементов — argc (argument count). • Тип каждого элемента — char * • char — это символ. • char * — указатель на символ: • Указатель содержит адрес памяти, т. е. место, где хранится что-либо (здесь: символ). • Строка — цепочка символов, имеем указатель на первый символ в ней. • Итого: массив мест, где начинаются строки-аргументы. Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 13 Пример разбора параметров командной строки Неправильно сравнивать адрес данных argv[1] с адресом константы "-h". Тип string сравнит значения. int main ( int argc, char* argv[ ] ) { if ( argc > 1 && string( argv[1] ) == "-h" ) { cout << "Программа вычисляет оценки " << "математического ожидания и дисперсии." } $ ./program -h // … Программа вычисляет оценки математического ожидания и дисперсии. } $ ./program Введите количество чисел: Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 14 О командной строке • На практике командную строку разбирают с помощью библиотек (getopt, Boost . ProgramOptions). • С ключом -h, --help, -?, --usage принято отображать краткую справку. • Если типичный запуск требует много опций, имеет смысл сделать текстовый файл настроек. • В Windows вместо -f принято /F ( / вместо - ). От этого отказываются. Не нужно так делать. Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 15 Литература к лекции ▪ Programming Principles and Practices Using C++: • глава 4, раздел 4.5 — функции; • глава 6, раздел 6.5 — декомпозиция; • глава 8 (пункт 8.5.8 — опционально); • пункт 9.4.1 — структуры, раздел 9.5 — перечисления; • упражнения к главам 4 и 8. ▪ C++ Primer: • глава 2, раздел 2.3 — указатели и ссылки; • глава 6 — функции; • раздел 19.3 — перечисления; • упражнения. Осень 2017 г. © Кафедра УиИ НИУ «МЭИ» 16
«Ввод и вывод данных» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ
Получи помощь с рефератом от ИИ-шки
ИИ ответит за 2 минуты

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot