Step 15 (S-40949)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/536/step/15

Посимвольный ввод

Как вы уже знаете оператор чтения из потока ввода (>>), обычно, игнорирует пробельные символы (это поведение можно изменить с помощью std::noskipws). Иногда это нежелательно. Для организации посимвольного ввода можно использовать метод get потока ввода так, как это показано в коде ниже (подробнее о методах вы узнаете на одной из следующих недель, сейчас вам достаточно понимать, что метод — это функция, которую нужно вызывать специальным образом):


char c = '\0';
while (cin.get(c)) { // на каждой итерации считываем один символ в переменную c
    /* здесь можно пользоваться значением прочитанным в переменную c */
    if (c != 'a')
        cout << c; // выводим символ, если он не равен 'a'
}


Метод get принимает на вход ссылку на переменную типа char (подробнее о ссылках вы узнаете на следующей неделе, пока вам достаточно знать, что метод get изменит значение переменной c, если чтение символа прошло удачно).

Значение, которое возвращает метод get может быть интерпретировано как логическое значение. Это значение интерпретируется как false, если при чтении произошла ошибка (это довольно редкий случай, поэтому мы не будем его здесь разбирать) или достигнут конец потока ввода. Т.е. цикл в примере выше прочитает весь ввод программы по одному символу за раз.

Что такое конец потока ввода? Если программа читает свой ввод из файла (это легко организовать средствами командной оболочки вашей любимой ОС, распространяться на этот счет мы не будем, а оставим вам на самостоятельно изучение), то программа достигнет конца потока ввода, когда прочитает весь файл целиком. Если же программа читает ввод с клавиатуры, то конец потока ввода определяется специальным нажатием клавиш, например, в Linux это, как правило, сочетание Ctrl+D, а в Windows — Ctrl-Z.