Для введення даних у рядок будемо використовувати функцію getline(). Ця функція дозволяє зчитувати рядок повністю, включаючи символи пробілів, і зберігати її в змінній типу string.
Оператор getline(cin,s) читає рядок зі стандартного потоку вводу (cin) та зберігає його у змінній s.
Ввід виконується включаючи і символ "кінець рядку", який виводиться у буфер при натисканні клавіші Enter.
Для вводу двох рядків потрібно використовувати дві функції getline().
Наприклад:
|
Консоль
|
Буфер введення (input buffer) - це тимчасова пам'ять, яка використовується для зберігання даних, які були введені користувачем з клавіатури та очікують на обробку програмою.
Коли ви вводите дані з клавіатури за допомогою функцій введення (наприклад, cin ), ці дані спочатку поміщаються в буфер введення, а потім зчитуються з нього програмою обробки.
Дані, які були зчитані з буфера і присвоєні змінній, видаляються з буфера. Ті дані, які не були зчитані та присвоєні змінній, залишаються у буфері.
Функція cin залишає в буфері останній символ кінця рядка '\n', який виводиться в буфер при натисканні клавіші Enter. Повторне використання функції cin не впливає на результат, оскільки вона пропускає ці символи.
Функція getline вводить всі символи, включаючи і кінець рядка теж. Тому, якщо ця функція використовується після cin, вона відразу зчитує символ кінця рядка '\n', який залишився в буфері після cin і присвоює значення порожнього рядка змінної в getline.
Тому, при одночасном використанні функцій cin та getline, після cin потрібно використовувати функцію cin.ignore(1, '\n'), яка ігнорує цей 1 символ, який залишився в буфері після cin
Наприклад:
|
Консоль
|
Для повного ігнорування всіх символів, що залишилися в буфері, можна використовувати функцію з більш складними параметрами:
|
Якщо ми введемо так:
|
То отримаємо результат:
|
У цьому випадку в буфері залишаться й символи werty, які не були зчитані.
Функція cin.ignore(numeric_limits<streamsize>::max(), '\n') ігнорує їх усі. Але для використання функції з такими параметрами, потрібно додати #include <limits>