Как читать до EOF из cin в C++

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

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

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

75
задан 5 revs, 3 users 60% 15 September 2012 в 16:29
поделиться

4 ответа

Единственным путем можно читать, переменный объем данных от stdin использует циклы. Я всегда находил, что std::getline() функция работает очень хорошо:

std::string line;
while (std::getline(std::cin, line))
{
    std::cout << line << std::endl;
}

По умолчанию getline () чтения до новой строки. Можно определить альтернативный символ завершения, но EOF не является самостоятельно символом, таким образом, Вы не можете просто выполнить один вызов к getline ().

66
ответ дан trotterdylan 24 November 2019 в 11:31
поделиться

Можно сделать это без явных циклов при помощи потоковых итераторов. Я уверен, что это использует некоторый цикл внутренне.

#include <string>
#include <iostream>
#include <istream>
#include <ostream>
#include <iterator>

int main()
{
// don't skip the whitespace while reading
  std::cin >> std::noskipws;

// use stream iterators to copy the stream to a string
  std::istream_iterator<char> it(std::cin);
  std::istream_iterator<char> end;
  std::string results(it, end);

  std::cout << results;
}
47
ответ дан KeithB 24 November 2019 в 11:31
поделиться

Используя циклы:

#include <iostream>
using namespace std;
...
// numbers
int n;
while (cin >> n)
{
   ...
}
// lines
string line;
while (getline(cin, line))
{
   ...
}
// characters
char c;
while (cin.get(c))
{
   ...
}

ресурс

43
ответ дан Degvik 24 November 2019 в 11:31
поделиться

Можно использовать станд.:: istream:: getline () (или предпочтительно версия, которая работает над станд.:: строка ), функционируют для получения всей строки. У обоих есть версии, которые позволяют Вам определять разделитель (конец символа строки). Значение по умолчанию для строковой версии является '\n'.

2
ответ дан luke 24 November 2019 в 11:31
поделиться
Другие вопросы по тегам:

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