Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Единственным путем можно читать, переменный объем данных от stdin использует циклы. Я всегда находил, что std::getline()
функция работает очень хорошо:
std::string line;
while (std::getline(std::cin, line))
{
std::cout << line << std::endl;
}
По умолчанию getline () чтения до новой строки. Можно определить альтернативный символ завершения, но EOF не является самостоятельно символом, таким образом, Вы не можете просто выполнить один вызов к getline ().
Можно сделать это без явных циклов при помощи потоковых итераторов. Я уверен, что это использует некоторый цикл внутренне.
#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;
}
Используя циклы:
#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))
{
...
}
Можно использовать станд.:: istream:: getline () (или предпочтительно версия, которая работает над станд.:: строка ), функционируют для получения всей строки. У обоих есть версии, которые позволяют Вам определять разделитель (конец символа строки). Значение по умолчанию для строковой версии является '\n'.