std::getline
имеет следующие перегрузки:
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
, и, как вы можете видеть, ни один из них не получает целое число в качестве второго параметра, поэтому здесь есть возможные решения для вас :
- , если вы ограничены C ++ 11, используйте
std::stoi
следующим образом:
std::string line;
std::getline(std::cin, line);
int T = std::stoi(line);
- Если вы можете использовать C ++ 17, я настоятельно рекомендую использовать
std::from_chars
следующим образом:
int value = 0;
std::string line;
std::getline(std::cin, line);
const auto result = std::from_chars(str.data(), str.data() + str.size(), value);
if (result.ec == std::errc()) {
// strings is successfully parsed
}
Почему std::from_chars
лучше, чем std::stoi
?
Поскольку std::from_chars
не генерирует ошибку и дает вам лучшее сообщение об ошибках (что даст вам больше информации о результате конверсии). Кроме того, по некоторым данным, это немного быстрее, чем std::stoi
. Подробнее о std::from_chars
здесь .