Я чувствую, что есть много похожих вопросов, поэтому мне очень жаль, если это дубликат. Однако я не мог найти ответ на этот конкретный вопрос.Как работает getline с cin?
Я смущен относительно того, как getline работает, когда cin передается ему, потому что я понимаю, что он должен вызывать cin каждый раз, когда он вызывается. При работе с кодом, который был в книге, которую я читаю, getline вызывается несколько раз, но отправляется только один вход. Объект cin не вызывается из любого места, кроме как внутри этих вызовов getline.
Что здесь происходит? Когда getline достигнут, программа просто останавливается на своих дорожках и ждет, пока входной поток передаст значение, включая требуемый разделитель? Если это так, делать последующие вызовы getline просто не нужно ждать, потому что у входного потока уже есть данные, включая их соответствующие разделители? Я провел пару тестов, которые предполагали, что это может быть так.
Вот код:
string firstName;
getline(cin,firstName,',');
string lastName;
getline(cin,lastName,',');
string job;
getline(cin,job,'\n');
cout<<firstName<<" "<<lastName<<" is a "<<job<<endl;;
Извините еще раз, если это глупый вопрос, но я посмотрел вокруг и действительно не мог найти ответа. Заранее благодарим за любую помощь, которая может быть предоставлена!
Разъяснение:
Этот код выводит "Первый Последний является задание" для консольного ввода "First, Last, Job \ п"
Каждый из них извлекает все до разделителя и включает его, поэтому он не может быть доступен для следующего вызова. – chris
@chris Если не существует более одного разделителя, поскольку он останавливается на первом. – ooga
@JS Что вы подразумеваете под словом «отправляется только один вход»? – ooga