Завершение ввода после символа '' (пробел) - PullRequest
0 голосов
/ 27 февраля 2011

Я только начинаю в C ++, и у меня возникли проблемы в некоторых практических вопросах, которые я не могу понять. Мне нужно иметь возможность прочитать строку из консоли в виде:

N A B C... etc.

Где N - это число, и следующие входные данные будут разных типов и разного количества в зависимости от того, что есть N.

Мой подход заключается в том, чтобы прочитать N и затем запросить различные входные данные, основанные на том, что есть N. Но я должен принять все входные данные в одной строке, и я не смог получить какую-либо форму ввода для завершения после одного пробела. Так можно ли в любом случае перейти к следующему утверждению после получения одного числа и пробела? Или есть лучший способ решить эту проблему? Спасибо заранее.

EDIT:

Хорошо, я думаю, что я понял это, но я не до конца понимаю, поэтому мне придется взглянуть на istringstream. Вот что у меня есть.

vector<string> words;

string token, text;
getline(cin, text);

istringstream iss(text);

while ( getline(iss, token, ' ') ) {

    words.push_back(token);

}

Это хороший способ сделать это, или я должен выбрать другой подход? И если кто-нибудь может, объясните мне эти строки?

while ( getline(iss, token, ' ') )

Я полагаю, это возвращает true, когда достигает пробела, при заполнении токена всеми предыдущими символами?

И этот меня смущает.

getline(cin, text);

Ответы [ 2 ]

3 голосов
/ 27 февраля 2011

Выражение cin >> n остановится на первом пробеле, независимо от того, является ли n типом числа или типом строки.Я полагаю, что scanf будет делать то же самое, если после последовательности %d или аналогичного формата есть пробел.

1 голос
/ 27 февраля 2011

Вы должны прочитать всю строку сразу (как требуется), а затем, в зависимости от N, ваш код должен проверить оставшуюся часть ввода, чтобы убедиться, что он правильно отформатирован, или распечатать ошибку.

...