Ответ 1
Используйте метод peek
, чтобы проверить следующий символ:
while ((istream.peek()!='\n') && (istream>>x))
У меня есть std:: 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
где... что-то... часть оценивает значение false после того, как я прочитал 2.0, и istream в точке должен быть в 3.0, чтобы следующий
istream >> x;
должен установить x равным 3.0.
Как бы вы достигли этого результата? Я предполагаю, что условие while
Заранее спасибо за вашу помощь!
Используйте метод peek
, чтобы проверить следующий символ:
while ((istream.peek()!='\n') && (istream>>x))
Прочитайте строки в std::string, используя std:: getline(), затем назначьте строку std:: istringstream и извлекать данные из этого, а не напрямую из istream.
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;
Вы можете использовать std::istream::peek()
, чтобы проверить, является ли следующий символ символом новой строки.
См. эту запись в справочнике cplusplus.com.
Прочитайте номер, затем прочитайте один символ, чтобы увидеть, была ли новая строка.
У меня была аналогичная проблема
Вход:
1 2
3 4 5
Первые два были N1 и N2
Тогда есть новая строка
то элементы 3 4 5, я не знаю, сколько их будет.
// read N1 & N2 using cin
int N1, N2;
cin >> N1;
cin >> N2;
// skip the new line which is after N2 (i.e; 2 value in 1st line)
cin.ignore(numeric_limits<streamsize>::max(), '\n');
// now read 3 4 5 elements
int ele;
// 2nd EOF condition may required,
// depending on if you dont have last new-line, and it is end of file.
while ((cin_.peek() != '\n') && (cin_.peek() != EOF)) {
cin >> ele;
// do something with ele
}
Это сработало идеально для меня.