2013-11-25 4 views
-2

Вот небольшой код:почему станд :: CIN не дает ошибку «полукокса»

char a; 
while(std::cin >> a) { 
    std::cout << a << " is pressed\n"; 
} 

Когда я типа в «ж», я получаю «нажимается ж». Когда я набираю «www», я получаю «w нажата» 3 раза подряд.

Может кто-нибудь объяснить, почему это происходит?

Благодаря

+2

Подсказка: 'while (std :: cin >> a)'. – 0x499602D2

+1

Почему вы ожидаете, что это даст нам ошибку? – interjay

+0

потому что его строка. Но потом я понимаю, что это похоже на 'std :: cin >> a >> a >> a;'. Как я могу это изменить? – Gasim

ответ

4

При использовании зОго :: CIN прочитать переменную обугленный он считывает один символ за один раз. Вот почему вы получаете 3 итерации в цикле while для ввода www.

+0

есть ли способ остановить это сразу после первого – Gasim

+0

@Gasim не использовать какое-то время, если вы просто хотите один вход –

+0

ну, тогда я должен использовать строку с этим, зная, что она будет работать, не так ли? – Gasim

0

Входы ввода queue. если вы ввели слишком много, ваш вход ждет пациента ...

+0

как я могу очистить их очередь? сразу после первого символа, затем – Gasim

+0

Попробуйте 'std :: cin.clear();' я не уверен в этом. – MeNa

+0

не повезло; я просто ввел std :: string в cin и получил символ string.at (0) – Gasim

0

Первая часть ответа находится в первой строке вашего кода.

char a; 

Переменная a является единым char, 8-битное значение, как правило, используется для хранения кода, представляющего символ дисплея. Если дисплей ASCII, то (значение) 0 = нет символов, (значение) 32 = пространство, величина 48 = (символ) '0', и т.д.

std::cin является экземпляром класса std::istream, он имеет различные элементы и перегрузки операторов для работы с разными типами. В случае char, вы звоните

std::istream::operator(char) 

Который читает один char, ровно один, из входного потока и возвращается.

#include <iostream> 
int main() 
{ 
    char a, b, c; 
    std::cin >> a >> b >> c; 
    std::cout << "a = " << a << ", b = " << b << ", c = " << c << '\n'; 
    return 0; 
} 
Смежные вопросы