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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
templas
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
#1

cin.get() - C++

14.01.2014, 22:15. Просмотров 303. Ответов 5
Метки нет (Все метки)

Здравствуйте! Пожалуйста объясните мне почему не получается обойтись обычным 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()
Посмотрите здесь:

cin.get C++
cin.getline() C++
C++ объект cin
cin.get() C++
a=get.cin() и get.cin(a) C++
C++ cin
cin C++
Cin.get C++
C++ cin и \n
C++ не работает Cin
Cin.get() C++
C++ While(cin)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.01.2014, 22:22     cin.get() #2
Цитата Сообщение от templas Посмотреть сообщение
почему не получается обойтись обычным cin ?
Обычный - это какой? Такой: cin >> ? Такой не всё читает (первые пробельные символы пропускает), и читает до первого пробельного символа, а cin.get() всё читает без пропусков.
HighPredator
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,384
Записей в блоге: 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
5454 / 1820 / 335
Регистрация: 10.12.2010
Сообщений: 5,384
Записей в блоге: 3
14.01.2014, 22:35     cin.get() #5
Цитата Сообщение от templas Посмотреть сообщение
В чем проблема?
В том, что вы напрочь не понимаете, что код делает. По поводу get смотрите мой пост выше.
alsav22
5415 / 4811 / 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()
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru