2015-08-10 3 views
2

Я новичок в программировании на C++. В учебнике автор упоминает, что «cin» сломается, если он прочитает пробел в строке. Если вы хотите, чтобы программа читалась во всей строке строки с пробелами, вы должны использовать функцию «getline».нет подходящей функции для вызова «getline»

Однако я не мог заставить его работать.

Вот мои коды:

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string my_name; 

    cout << "Please enter your name: "; 
    getline(cin, my_name, "\n"); 

    cout << "My name is " << my_name << " ."; 
} 

В среде IDE я использую Xcode. Сообщение об ошибке «Нет соответствующей функции для вызова« getline ».

Я искал аналогичные проблемы, но, похоже, ни одно из решений не относится к моей проблеме. Может, мне не хватает знаний? Спасибо.

ответ

4

Ошибка полная ошибка скажет вам, почему ваш третий параметр неправильного типа.

Это должен быть тип символа, а не строка символов с нулевым символом.

getline(cin, my_name, '\n'); 

Редактировать: И, '\n'специально это предполагается разделителем в другой форме getline:

getline(cin, my_name); 
+1

'getline (cin, my_name);' будет еще лучше –

+0

Спасибо. Объяснение очень ясно. –

2

Что сказал ваш учитель не так. cin не «ломается». Просто форматированное извлечение в std::string предназначено для чтения по слову. Это намеренно. Это не сломано.

Что касается вашей ошибки, ваш звонок std::getline не работает, потому что аргумент разделителя имеет неправильный тип. '\n' - char литеральный; "\n" - это буквальный массив цифр, совсем не то, что вы хотели.

+0

Спасибо за дополнительное объяснение разницы между «\ n» и «\ n»! –

+0

@NoahSong: Это не «дополнительное объяснение»; это основная причина вашей проблемы! –

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