logo
Харви Дейтел, Пол Дейтел Как программировать на С++ / 02-Deitel-Стр-115-214

Глава 2

// Подсчет числа буквенных оценок iinclude <iostream.h>

main(} {

int grade;

int aCount .= 0, bCount = 0, cCount = 0, dCount = 0, fCount = 0;

cout « "Введите буквенную оценку." « endl

« "Введите символ EOF по окончании ввода." « endl;

while ( ( grade = cin.get() ) != EOF ) (

case

switch (grade) {

case 'A'

++aCount; break;

case

case 'B': case ++bCount; break;

case 'C'

case

++cCount; break;

case

case

++dCount; break;

case

++fCount; break;

case '\n': case ' ' break;

// switch, вложенный в while

// Grade равна А в верхнем регистре

// или а в нижнем регистре.

// Grade равна В в верхнем регистре

// или b в нижнем регистре.

// Grade равна С в верхнем регистре

// или с в нижнем регистре.

// Grade равна D в верхнем регистре

// или d в нижнем регистре.

// Grade равна F в верхнем регистре

// или f в нижнем регистре.

// этот ввод игнорируется

default: cout

break;

}

// при любых других символах « "Введена неправильная буквенная оценка." « " Введите новую оценку." « endl;

cout « endl « "Количество различных оценок:"

« endl « "А: " « aCount « endl « "В: " « bCount « endl « "С: " « cCount « endl « "D: " « dCount « endl « "F: " « fCount « endl;

return 0;

Рис 2.22. Пример использования switch (часть 1 из 2)

Управляющие структуры 129

Введите буквенную оценку.

Введите символ EOF по окончании ввода.

А

В

С

С

А

D

F

С

E

Введена неправильная буквенная оценка. Введите новую оценку.

D

А

В

Количество различных оценок:

А: 3

В: 2

С: 3

D: 2

F: 1

Рис. 2.22. Пример использования switch (часть 2 из 2)

Оператор присваивания в ряде случаев можно рассматривать как единое целое, как некое выражение, значение которого равно значению, присвоен­ному переменной слева от символа =. Таким образом, значение присваивания grade = cin.get() равно значению, возвращенному функцией cin.get() и при­своенному переменной grade.

Тот факт, что операторы присваивания имеют значение, можно исполь­зовать для задания одного и того же начального значения сразу нескольким переменных. Например, в операторе

а = b = с = 0;

сначала выполняется присваивание с = 0 (так как операция присваивания = имеет ассоциативность справа налево). Затем переменной b присваивается значение присваивания с = 0 (которое равно 0). Затем переменной а присваивается значение присваивания b = (с = 0) (которое тоже равно 0). В нашей программе значение присваивания grade = cin.get() сравнивается со значением EOF — символа, который установлен для «конца файла». Мы используем EOF (который обычно имеет значение -1) как значение метки. Пользователь нажимает зависящую от системы комбинацию клавиш, озна­чающую «конец файла», т.е. как бы говорит: «У меня нет больше данных для ввода». EOF — символическая целая константа, определенная в голов­ном файле <iostream.h>. Если значение, присвоенное переменной grade, равно EOF, то программа заканчивается. В данной программе мы выбрали для символа представление int, так как EOF — целая величина (повторим, что обычно она равна -1).

Замечание по мобильности 2.1

Комбинация клавиш для ввода признака конца файла зависит от системы.