2010-07-30 3 views
1

Я начал изучать cpp и столкнулся cin как способ получить ввод с клавиатуры. Если я понял, cin - это объект, а >> - оператор, определенный для него. Как он определяется, как он «знает», чтобы отделять слова друг от друга? и еще что-то, в чем смысл: while (cin) is cin a bool type? что это означает, если он возвращает true или false?cin object в cpp

+0

„в пути он определен, как она „знает“, чтобы отделить слова друг от друга“? Непонятно, что вы здесь просите. –

ответ

3

Призвание:

cin >> var1 >> var2 >> var3; 

эквивалентно:

cin >> var1; 
cin >> var2; 
cin >> var3; 

Насколько идет ваш другой вопрос, в C/C ничего ++, который возвращает NULL или ноль рассматривается как ложное в if , иначе оно будет считаться истинным.

Именно поэтому линия: if(cin) работает, чтобы проверить, есть ли больше данных для чтения в потоке. .

+2

Ваше описание 'if (cin)' - не совсем вся правда. Нельзя ставить что-либо как условие; должен быть примитивным типом или иначе «конвертируемым» в один. В случае std :: istream, из которых std :: cin является экземпляром, это делается с помощью 'operator void *()'. Пока поток «хорошо», функция возвращает не-NULL, иначе возвращается NULL. – Lajnold

1

При использовании входного потока существуют определенные символы (символы), определенные для отдельных элементов на входе. По умолчанию я считаю, что это космический персонаж. Таким образом, вы можете вводить вещи, разделенные пробелами.

+0

+1 потому что это объясняет, как cin «знает», как отделять слова от входного потока. – rturrado

+1

Фактически, он использует любой символ пробела в качестве разделителя, который включает в себя пространство, новую строку, вкладку и многое другое. Но верно, что он останавливает текущее извлечение, когда встречается разделитель. – Lajnold

2

cin usage

«Где STRM идентификатор объекта IStream и переменная является объектом любого типа, поддерживаемого в качестве правого параметра можно также назвать последовательность операций экстракции, как:

strm >> variable1 >> variable2 >> variable3; //... 

, который является таким же, как выполняя последовательные экстракции из того же самого объекта STRM»-> от operator>>

Смежные вопросы