ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 3) онлайн
Функция getche()
Следующий наш пример CHCOUNT демонстрирует использование ветвления if...else внутри цикла while. Кроме того, в нем используется библиотечная функция getche(). Программа подсчитывает количество слов и символов в строке, вводи- мой пользователем с клавиатуры.
// chcount.cpp
// подсчет числа слов и символов в строке #include <iostream> using namespace std;
#include <conio.h> // для getche()
int main() {
int chcount = 0; // число непробельных символов
int wdcount = 1; // число пробелов
char ch = 'a'; // ch должна иметь определенное значение
cout << "Введите строку: ";
while(ch != '\r' ) // цикл, пока не будет нажата клавиша Enter
{
cout << "Это число больше, чем 100\n";
else
cout << "Это число не больше, чем 100\n";
return 0;
}
В зависимости от истинности или ложности условия ветвления, программа выводит на экран соответствующее сообщение. Вот результаты двух вызовов программы:
Введите число; 300
Это число больше, чем 100
Введите число: 3
Это число не больше, чем 100
Функционирование ветвления if...else показано на рис. 3.10.

ch = getche(); // считывание символа
if( ch == ' ' ) // если символ является пробелом,
wdcount++; // то инкрементируем число слов
else // в противном случае
chcount++; // инкрементируем число символов
} // вывод результатов на экран
cout << "\nCлов: " << wdcount << endl;
cout << "Букв: " << (chcount-1)<< endl;
return 0;
}
До сих пор мы использовали для ввода только объект cin и операцию >>. Такой способ вводить значения предполагает, что после ввода значения пользователь нажмет клавишу Enter. Это верно и в отношении отдельных символов: пользователь вводит символ, а затем нажимает Enter. В данном случае программе необходимо обрабатывать каждый введенный символ сразу после его появления, не дожидаясь нажатия клавиши Enter. Такую возможность обеспечивает библиотечная функция getche(). Эта функция не имеет аргументов, а ее описание содержится в заголовочном файле CONIO.H. Значение, возвращаемое функцией getche(), присваивается переменной ch (функция getche(), кроме возвращения значения, печатает это значение на экране; такой ввод называется ввод с эхом (echo), что отражено в названии функции буквой е на конце. Другая функция под названием getch() похожа на функцию getche(), но, в отличие от нее, не отображает вводимый символ на экране.
Ветвление if...else увеличивает на единицу значение переменной wdcount в том случае, если с клавиатуры вводится пробел, и значение переменной chcount, если введен не пробел. Таким образом, программа считает за букву любой символ, не являющийся пробелом. Разумеется, этот алгоритм примитивен и дает ошибочный результат уже при введении нескольких пробелов между словами. Взаимодействие с программой может осуществляться следующим образом:
Введите строку: For while and do
Слов: 4
Букв: 13
Условие цикла while проверяет, не является ли нажатая клавиша клавишей Enter, что соответствует выдаче функцией getche() символа, соответствующего управляющей последовательности '\r'. При нажатии клавиши Enter цикл и про- грамма завершаются.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
