Вот один пример, в котором используются operator>>
и std::string
:
int x;
std::string name;
int y;
int quantity;
std::cin >> quantity;
for (int i = 0; i < quantity; ++i)
{
std::cin >> x;
std::cin >> name;
std::cin >> y;
}
Вышеприведенное будет работать для всех строк, которые имеют 3 поля, но не для строк без последнего поля. Итак, нам нужно дополнить алгоритм:
std::string text_line;
for (i = 0; i < quantity; ++i)
{
std::getline(std::cin, text_line); // Read in the line of text
std::istringstream text_stream(text_line);
text_line >> x;
text_line >> name;
// The following statement will place the text_stream into an error state if
// there is no 3rd field, but the text_stream is not used anymore.
text_line >> y;
}
Причина root в том, что пропущенные 3-ий элементы поля приведут к тому, что первый пример будет не синхронизирован c, поскольку он будет читать 1-й столбец следующей строки для 3-го поля.
Второй пример кода вносит исправление, считывая строку за раз. Операции ввода ограничены текстовой строкой и не будут проходить go за текстовой строкой.