Примером этого исключаемого исключения является: Когда вы пытаетесь проверить что-то, это null.
Например:
string testString = null; //Because it doesn't have a value (i.e. it's null; "Length" cannot do what it needs to do)
if (testString.Length == 0) // Throws a nullreferenceexception
{
//Do something
}
Время выполнения .NET исключение NullReferenceException при попытке выполнить действие над чем-то, что не было инстанцировано, т.е. код выше.
По сравнению с ArgumentNullException, которое обычно выбрано как защитная мера, если метод ожидает, что то, что происходит
Дополнительная информация находится в C # NullReferenceException и Null Parameter .
Вы не говорите, что a
, но неважно: если вам нужен синтаксический анализ на основе строки, вам нужно иметь getline
во внешнем цикле. Кроме того, never использует eof
, поскольку он не делает то, что вы хотите. Скорее используйте неявное преобразование в bool
, чтобы проверить, удалось ли выполнить операцию.
Вот типичный концерт:
#include <sstream>
#include <fstream>
#include <string>
std::string line;
std::ifstream infile("myfile.txt");
while (std::getline(infile, line)) // this does the checking!
{
std::istringstream iss(line);
char c;
while (iss >> c)
{
int value = c - '0';
// process value
}
}
Однако это преобразование из char
в int
является громоздким и хрупким. Почему бы не прочитать целое число напрямую?
int value;
while (iss >> value) { /* ... */ }
Изменить: на основе вашего комментария, вот код, который нужно прочитать ровно две строки:
std::string line;
int val;
if (std::getline(infile, line))
{
std::istringstream iss(line);
while (iss >> value) { /* process first line */ }
}
if (std::getline(infile, line))
{
std::istringstream iss(line);
while (iss >> value) { /* process second line */ }
}