ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В 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 цикл и про- грамма завершаются.

 

28