2016-02-05 4 views
-2

я получаю Int, выполнив следующие действия:Как работает std :: cin?

int num; 
cin >> num; 

Я получаю строку, выполнив следующие действия:

string word; 
cin >> word; 

Мой вопрос: Как cin выполняет преобразование внутри? Будет ли когда-нибудь выдаваться ошибка, если я введу что-то неожиданное? Например: «ɔool ʇǝxʇ ƃǝuǝɹɐʇoɹ oulıuǝ». Что такое защитный цин?

Я новичок в C++

+5

Вы прочитали какую-либо из [документации] (http://en.cppreference.com/w/cpp/io/basic_istream)? – NathanOliver

+4

У этого есть перегрузки для указанных типов данных. –

+1

И не забудьте посмотреть информацию о языковых тегах. Они часто имеют списки ссылок и часто задаваемые вопросы. Очень полезный материал! http://stackoverflow.com/tags/c%2b%2b/info –

ответ

2

Обратите внимание, что >> является оператором. C++ предоставляет возможность определять функции, которые предоставляют функциональные возможности для любого встроенного оператора. (Обратите внимание: вы не можете создавать новые операторы, которые еще не существуют на этом языке.) В этом конкретном случае оператор >> был перегружен для использования с cin и либо int, либо string. Затем эти функции выполняют преобразование. В случае версии int он установит флаг ошибки в cin, если вход не может быть преобразован в int.

1

std::cin читает с stdin.

Это:

string word; 
cin >> word; 

вернет string, не char*. Попробуйте избежать массивов символов в C++.

Подробнее о std::cinhere. Также изучение stringstreams очень полезно при работе с C++ IO.

+0

Вернее, 'cin' читает со стандартного ввода (stdin). Это может быть консоль, но она также может быть файлом или другим устройством в зависимости от операционной системы и перенаправления пользователем. –

+0

Спасибо, исправляя меня, я отредактирую свой ответ. – PhotometricStereo

1

Возможно, вы захотите ознакомиться с книгой о iostreams на C++. Like the C++ book by Stroustrup who invented C++.

Но в итоге объект iostream, как и cin, имеет goodbit, badbit, failbit и eofbit. Look at iostate.

Объект cin будет возвращать false, если это ничего, кроме хорошего. Таким образом, вы можете прочитать целые числа, как это:

int my_int; 
while(cin >> my_int) { 
    cout << "Received " << my_int << "\n"; 
} 

Цикл будет выходить, когда он читает что-нибудь, что не является числом или при достижении конца файла.

+1

«Объект cin вернет false, когда он ничего, кроме хорошего». Чтобы быть педантичным, 'operator >>' будет возвращать сам поток, а не логический. К счастью, поток имеет (возможное) преобразование в 'bool' на основе того, установлен ли goodbit или нет. – AndyG

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