C++ считан из istream до новой строки (но не пробел)

У меня есть станд.:: istream, который относится к матричным данным, чему-то как:

0.0 1.0 2.0
3.0 4.0 5.0

Теперь, для оценки числа столбцов, я хотел бы иметь некоторый код как:

std::vector<double> vec;
double x;
while( (...something...) && (istream >> x) )
{
    vec.push_back(x); 
}
//Here vec should contain 0.0, 1.0 and 2.0

где... что-то... часть оценивает ко лжи после того, как я читал 2.0, и istream в точке должен быть в 3,0 так, чтобы следующее

istream >> x;

должен установить x, равный 3,0.

Как Вы достигли бы этого результата? Я предполагаю что в то время как условие

Заранее большое спасибо за Вашу справку!

18
задан StephQ 16 July 2010 в 08:57
поделиться

5 ответов

Используйте метод peek для проверки следующего символа:

while ((istream.peek()!='\n') && (istream>>x))
12
ответ дан 30 November 2019 в 08:47
поделиться

Прочитайте строки в std::string с помощью std::getline(), затем назначьте строку объекту std::istringstream и извлеките данные из него, а не непосредственно из istream.

7
ответ дан 30 November 2019 в 08:47
поделиться

Вы можете использовать std::istream::peek(), чтобы проверить, является ли следующий символ новой строкой. См. эту запись в справочнике cplusplus.com.

1
ответ дан 30 November 2019 в 08:47
поделиться

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

0
ответ дан 30 November 2019 в 08:47
поделиться
std::vector<double> vec;
{
   std::string line;
   std::getline( ifile, line );
   std::istringstream is(line);
   std::copy( std::istream_iterator<double>(is), std::istream_iterator<double>(),
              std::back_inserter(vec) );
}
std::cout << "Input has " << vec.size() << " columns." << std::endl;
std::cout << "Read values are: ";
std::copy( vec.begin(), vec.end(), 
           std::ostream_iterator<double>( std::cout, " " ) );
std::cout << std::endl;
2
ответ дан 30 November 2019 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: