Форум программистов, компьютерный форум CyberForum.ru

cin.get() - C++

Восстановить пароль Регистрация
 
templas
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
14.01.2014, 22:15     cin.get() #1
Здравствуйте! Пожалуйста объясните мне почему не получается обойтись обычным cin ? Почему именно cin.get()?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 
#include <conio.h>
using namespace std;
 
int main() 
{
    setlocale(LC_ALL,"Rus");
 
    int a;
 
    while(!(cin >> a))
    {
        cin.clear();
        cout << "try again ";
        while (cin.get() != '\n');
    }
 
 
    _getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2014, 22:15     cin.get()
Посмотрите здесь:

C++ Объект cin и его метод cin.get()
C++ использование cin.get вместо cin
C++ Отличие функции cin.get и cin.getline
cin.getline и cin.ignore C++
C++ Cin вместо cin.getline
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.01.2014, 22:22     cin.get() #2
Цитата Сообщение от templas Посмотреть сообщение
почему не получается обойтись обычным cin ?
Обычный - это какой? Такой: cin >> ? Такой не всё читает (первые пробельные символы пропускает), и читает до первого пробельного символа, а cin.get() всё читает без пропусков.
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,107
Записей в блоге: 3
14.01.2014, 22:27     cin.get() #3
Исходя из логики цикла. Цикл работает пока не будет нажата клавиша Enter. Просто cin-ом вы это не поймаете.
templas
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
14.01.2014, 22:27  [ТС]     cin.get() #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Обычный - это какой? Такой: cin >> ? Такой не всё читает (первые пробельные символы пропускает), и читает до первого пробельного символа, а cin.get() всё читает без пропусков.
Да именно. почему нельзя так?

C++
1
2
3
4
5
6
while(!(cin >> a))
    {
        cin.clear();
        cout << "try again ";
        cin >> a;
    }
Я ввожу букву вместо целого числа у меня происходит зацикливание. В чем проблема?
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,107
Записей в блоге: 3
14.01.2014, 22:35     cin.get() #5
Цитата Сообщение от templas Посмотреть сообщение
В чем проблема?
В том, что вы напрочь не понимаете, что код делает. По поводу get смотрите мой пост выше.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.01.2014, 22:48     cin.get() #6
Цитата Сообщение от templas Посмотреть сообщение
Я ввожу букву вместо целого числа у меня происходит зацикливание. В чем проблема?
При ошибке в потоке невведённое остаётся в очереди ввода, которую нужно очистить. Вот эта конструкция делает очистку (извлекает все введённые символы вместе с '\n'):
C++
1
while (cin.get() != '\n');
Добавлено через 2 минуты
У вас же, при следующем чтении, опять считается буква, опять ошибка в потоке, cin.clear() сделает поток рабочим, опять считается буква, опять ошибка и т.д.
Yandex
Объявления
14.01.2014, 22:48     cin.get()
Ответ Создать тему
Опции темы

Текущее время: 06:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru