Упражнение 1.16. Напишите собственную версию программы, которая выводит сумму набора целых чисел, прочитанных при помощи объекта cin
.
1.4.4. Оператор if
Подобно большинству языков, С++ предоставляет оператор if
, который обеспечивает выполнение операторов по условию. Оператор if
можно использовать для написания программы подсчета количества последовательных совпадений значений во вводе:
#include <iostream>
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;