C ++ cout cin строки манипуляции - PullRequest
1 голос
/ 15 ноября 2009

Я пытаюсь получить строку в качестве ввода из командной строки. Моя проблема в том, что я не получаю всю строку, но она токенизируется пробелом.

Так что, если я введу что-то вроде "Мне очень нравится математика" вместо того, чтобы получить

"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;

Ответы [ 2 ]

12 голосов
/ 15 ноября 2009

std::getline - это стандартный способ чтения строки ввода за раз.

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

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

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

if (std::getline(std::cin, string))
{
    // successfully read a line...
}
1 голос
/ 15 ноября 2009

cin.getline(input);

Подробнее см. http://www.cplusplus.com/reference/iostream/istream/getline/.

...