Упражнение 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; // добавить 1 к cnt
> else { // в противном случае вывести счет для
> // предыдущего значения
> std::cout << currVal << " occurs "
> << ent << " times" << std::endl;
> currVal = val; // запомнить новое значение
> cnt = 1; // сбросить счетчик
> }
> } // цикл while заканчивается здесь
> // не забыть вывести счет для последнего значения
> std::cout << currVal << " occurs "
> << cnt << " times" << std::endl;
> } // первый оператор if заканчивается здесь
> return 0;
>}
Если задать этой программе следующий ввод:
>42 42 42 42 42 55 55 62 100 100 100
то результат будет таким:
>42 occurs 5 times
>55 occurs 2 times
>62 occurs 1 times
>100 occurs 3 times
Большая часть кода в этой программе должна быть уже знакома по прежним программам. Сначала определяются переменные >val
и >currVal
: >currVal
будет содержать подсчитываемое число, а переменная >val
— каждое число, читаемое из ввода. Новыми являются два оператора >if
. Первый гарантирует, что ввод не пуст.
>if (std::cin >> currVal) {
> // ...
>} // первый оператор if заканчивается здесь
Подобно оператору >while
, оператор >if
проверяет условие. Условие в первом операторе >if
читает значение в переменную >currVal
. Если чтение успешно, то условие истинно и выполняется блок кода, начинающийся с открытой фигурной скобки после условия. Этот блок завершается закрывающей фигурной скобкой непосредственно перед оператором >return
.
Как только подсчитываемое стало известно, определяется переменная >cnt
, содержащая счет совпадений данного числа. Для многократного чтения чисел со стандартного устройства ввода используется цикл >while
, подобный приведенному в предыдущем разделе.
Телом цикла >while
является блок, содержащий второй оператор >if
:
>if (val == currVal) // если значение то же
> ++cnt; // добавить 1 к cnt
>else { // в противном случае вывести счет для
> // предыдущего значения
> std::cout << currVal << " occurs "
> << cnt << " times" << std::endl;
> currVal = val; // запомнить новое значение
> cnt = 1; // сбросить счетчик
>}
Условие в этом операторе >if
использует для проверки равенства значений переменных