2009-11-15 2 views
1

Я пытаюсь получить строку в качестве ввода из командной строки. Моя проблема в том, что я не получаю целую строку, но она символизируется пространством.C++ cout cin string manipulation

Так что, если я вошел кое-что, например, «Я люблю математику много» вместо получения

"you enterend: I like Math a lot" 

Я получаю происходит некорректно:

EDITING MODE: Enter a command 
i like Math a lot 
you entered i 

EDITING MODE: Enter a command 
you entered like 

EDITING MODE: Enter a command 
you entered Math 

EDITING MODE: Enter a command 
you entered a 

EDITING MODE: Enter a command 
you entered lot 


void enterEditingMode(){ 
    editingMode = TRUE; 
    static string CMD = "\nEDITING MODE: Enter a command\n"; 
    string input; 
    while(editingMode == TRUE){ 
     cout << CMD; 
     cin >> input; 
     //we assume input is always correct 
     // here we need to parse the instruction 
     cout << "you entered " << input <<endl; 

ответ

12

std::getline является стандартным способом, чтобы прочитать строку ввод за раз.

Вы можете использовать его как это:

std::getline(std::cin, string); 

Он возвращает ссылку на входной поток, который имеет неявное преобразование в void*, так что вы можете проверить успех легко, как это:

if (std::getline(std::cin, string)) 
{ 
    // successfully read a line... 
} 
+1

И не забудьте версию cin.getline (char *, int), если вы хотите взять строку c. –

+0

У него нет явного преобразования в void *. Он имеет явное преобразование в неуказанный тип, который можно использовать в булевом контексте. Это может быть недействительным * в вашей реализации, но это может не устоять во всех. И его намного легче объяснить новичкам, что результат конвертируется в нечто, что действует как логическое. –

+0

На самом деле, 'operator void *' требуется по стандарту. Это часть интерфейса базового класса basic_ios. –

1

cin.getline(input);

См. http://www.cplusplus.com/reference/iostream/istream/getline/ для получения дополнительной информации.

+0

Функции 'istream', называемые' getline', принимают все буферы 'char' и длину, а не' string'. –

+0

Я уже пробовал это, проблема в том, что, поскольку код находится в цикле while, сначала он считывает новый символ строки. Поэтому я всегда получаю «вы вошли», когда я даже ничего не вписываю. – user69514