Краткое содержание
Программа превращает входные данные в выходные, и этот урок изучает оба конца такого превращения и то, что может сломаться между ними. Он учит выводить текст функциями std::print и std::println, с заполнителями и спецификациями формата, которые задают ширину, выравнивание и число знаков после точки; считывать числа через std::cin; предвидеть, что происходит, когда пользователь вводит не то, что у него просили, а это при такой системе ввода, как в C++, даёт не предупреждение, а поток в состоянии ошибки и переменную с нулём; и делить ошибки программы на четыре вида по моменту, в который они проявляются: ошибки компиляции, компоновки, времени выполнения и логические ошибки. Завершается урок методичным чтением сообщений компилятора.
Цели обучения
- Писать программы, которые считывают данные через
std::cinи выводят результаты функциейstd::println, задавая спецификациями формата ширину и число знаков после точки. - Предсказывать точный вывод программы с несколькими вызовами
std::printиstd::println, включая переводы строки. - Описывать, что происходит, когда ввод не имеет ожидаемой формы (буквы вместо числа), и проверять состояние чтения.
- Относить ошибку к ошибкам компиляции, компоновки, времени выполнения или к логическим и находить её по тому, как она проявляется.
Программа и её граница
В уроке От задачи к алгоритму каждая задача задавалась тем, что входит, и тем, что выходит. Программа воплощает такую спецификацию: получает данные, преобразует их и выдаёт результаты. Однако данные рождаются не внутри программы, а вне её: на клавиатуре того, кто ею пользуется, в файле или в другой программе; и результаты тоже не остаются внутри, а уходят на экран, в файл или в другую программу. Связь с этим внешним миром идёт по двум каналам, которые операционная система открывает каждой программе при её запуске: стандартному вводу, который в терминале есть то, что набирается на клавиатуре, и стандартному выводу, то есть тому, что показывает терминал. C++ представляет их как потоки: последовательности символов, которые потребляются или производятся по порядку, один за другим.
Два конца несимметричны. Вывод определяет программа, и поэтому его можно записать точно: каждый символ, появившийся на экране, есть тот, который программа велела вывести. Ввод же определяет другой: программа просит число, но тот, кто сидит за клавиатурой, может набрать слово, число с десятичной запятой, слишком большое число или ничего. Если это так, ввод есть ненадёжная граница, и всякая программа, которая считывает данные, должна предусматривать, что она сделает, если полученное не имеет ожидаемой формы. Этот урок учит сначала выводить, потом считывать, потом тому, что происходит, когда чтение не удаётся, и наконец распознавать ошибки, ошибки программы, а не пользователя, по моменту, в который они проявляются.
Загрузка содержимого…