2015-09-04 3 views
0

Я использую функцию getline (cin, varname) для ввода строки с реализованными пробелами в ней, но когда я запускаю программу, она не принимает никаких данных от пользователя и переходит к следующему линия .Функция getline()

cout<<"Enter title : " ; getline(cin,title) ; 
+0

Пожалуйста, напишите [MCVE] (http://stackoverflow.com/help/mcve). – erip

ответ

0

Вот как использовать std::getline

#include <iostream> 
#include <string> 

int main() { 
    std::string title; 
    std::cout << "Please enter title: " << std::cout; 
    std::getline(std::cin, title); 

    std::cout << "\n" << title << " is a good title!\n"; 

    return 0; 

} 
+0

В чем разница, я использую #include , #include , используя пространство имен std – Ma7moud

+0

Нет. 'using namespace std' тянет во всех материалах cout/cin вместе со всей библиотекой iostream и string. Это облегчает чтение, но это не рекомендуется, потому что есть сотни имен, которые вы тогда не можете использовать (что, если у вас есть собственный «класс строк», например?) – Brad

0

Проблема заключается в том, что, так как вы не имеете endl, буфер еще не покраснел, поэтому вход становится вывод, что вы печатаете. Добавить endl после getline:

#include <iostream> 
#include <string> 

int main() { 
    std::string title; 
    std::cout << "Please enter title: "<<std::endl; 
    std::getline(std::cin, title); 

    return 0; 

} 

Если вы действительно хотите, чтобы вход, чтобы быть рядом подсказке, и вы должны использовать getline, имея в виду, что вы, вероятно, получите «Пожалуйста, введите название» приглашение Кроме того, вы можете сделать это:

#include <iostream> 
#include <string> 

int main() { 
    std::string title; 
    std::cout << "Please enter title: "<<std::flush; 
    std::getline(std::cin, title); 

    return 0; 

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