Язык программирования C++. Пятое издание - [10]

Шрифт
Интервал

по имени >sum и >value, инициализируемые значением >0. Переменная >value применяется для хранения чисел, вводимых в условии цикла >while.

>while (std::cin >> value)

Условием продолжения цикла >while является выражение

>std::cin >> value

Это выражение читает следующее число со стандартного устройства ввода и сохраняет его в переменной >value. Как упоминалось в разделе 1.2, оператор ввода возвращает свой левый операнд. Таким образом, в условии фактически проверяется объект >std::cin.

Когда объект типа >istream используется при проверке условия, результат зависит от состояния потока. Если поток допустим, т.е. не столкнулся с ошибкой и ввод следующего значения еще возможен, это условие считается истинным. Объект типа >istream переходит в недопустимое состояние по достижении конца файла (end-of-file) или при вводе недопустимых данных, например строки вместо числа. Недопустимое состояние объекта типа >istream в условии свидетельствует о том, что оно ложно.

Таким образом, пока не достигнут конец файла (или не произошла ошибка ввода), условие остается истинным и выполняется тело цикла >while. Тело состоит из одного составного оператора присвоения, который добавляет значение переменной >value к текущему значению переменной >sum. Однажды нарушение условия завершает цикл >while. По выходе из цикла выполняется следующий оператор, который выводит значение переменной >sum, сопровождаемое манипулятором >endl.

Ввод конца файла с клавиатуры

Разные операционные системы используют для конца файла различные значения. Для ввода символа конца файла в операционной системе Windows достаточно нажать комбинацию клавиш (удерживая нажатой клавишу , нажать клавишу ), а затем клавишу или . На машине с операционной системой UNIX, включая Mac OS-X, как правило, используется комбинация клавиш .

Возвращаясь к компиляции

Одной из задач компилятора является поиск ошибок в тексте программ. Компилятор, безусловно, не может выяснить, делает ли программа то, что предполагал ее автор, но вполне способен обнаружить ошибки в форме записи. Ниже приведены примеры ошибок, которые компилятор обнаруживает чаще всего.

Синтаксические ошибки. Речь идет о грамматических ошибках языка С++. Приведенный ниже код демонстрирует наиболее распространенные синтаксические ошибки, снабженные комментариями, которые описывают их суть.

>// ошибка: отсутствует ')' список параметров функции main()

>int main ( {

> // ошибка: после endl используется двоеточие, а не точка с запятой

> std::cout << "Read each file." << std::endl:

> // ошибка: отсутствуют кавычки вокруг строкового литерала

> std::cout << Update master. << std::endl;

> // ошибка: отсутствует второй оператор вывода

> std::cout << "Write new master." std::endl;

> // ошибка: отсутствует ';' после оператора return

> return 0

>}

Ошибки несовпадения типа. Каждый элемент данных языка С++ имеет тип. Значение >10, например, является числом типа >int. Слово >"привет" с парными кавычками — это строковый литерал. Примером ошибки несовпадения является передача строкового литерала функции, которая ожидает целочисленным аргумент.

Ошибки объявления. Каждое имя, используемое в программе на языке С++, должно быть вначале объявлено. Использование необъявленного имени обычно приводит к сообщению об ошибке. Типичными ошибками объявления является также отсутствие указания пространства имен, например >std::, при доступе к имени, определенному в библиотеке, а также орфографические ошибки в именах идентификаторов.

>#include

>int main() {

> int v1 = 0, v2 = 0;

> std::cin >> v >> v2; // ошибка: используется "v" вместо "v1"

> // cout не определен, должно быть std::cout

> cout << v1 + v2 << std::endl;

> return 0;

>}

Сообщение об ошибке содержит обычно номер строки и краткое описание того, что компилятор считает неправильным. Исправлять ошибки имеет смысл в том порядке, в котором поступают сообщения о них. Зачастую одна ошибка приводит к появлению других, поэтому компилятор, как правило, сообщает о большем количестве ошибок, чем имеется фактически. Целесообразно также перекомпилировать код после устранения каждой ошибки или небольшого количества вполне очевидных ошибок. Этот цикл известен под названием "редактирование, компиляция, отладка" (edit-compile-debug).

Упражнения раздела 1.4.3

Упражнение 1.16. Напишите собственную версию программы, которая выводит сумму набора целых чисел, прочитанных при помощи объекта >cin.

1.4.4. Оператор >if

Подобно большинству языков, С++ предоставляет оператор>if, который обеспечивает выполнение операторов по условию. Оператор >if можно использовать для написания программы подсчета количества последовательных совпадений значений во вводе:

>#include

>int main() {

> // currVal - подсчитываемое число; новые значения будем читать в val

> int currVal = 0, val = 0;

> // прочитать первое число и удостовериться в наличии данных

> // для обработки

> if (std::cin >> currVal) {

>  int cnt = 1; // сохранить счет для текущего значения

>  while (std::cin >> val) { // читать остальные числа

>   if (val == currVal)      // если значение то же

>    ++cnt;                  //


Рекомендуем почитать
Графика DirectX в Delphi

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.