Разделяя строки в файле и сохраняя их в векторе structs [duplicate]

Примером этого исключаемого исключения является: Когда вы пытаетесь проверить что-то, это 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 .

4
задан Nic Young 9 October 2011 в 23:59
поделиться

1 ответ

Вы не говорите, что 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 */ }
}
10
ответ дан Kerrek SB 4 September 2018 в 10:36
поделиться
Другие вопросы по тегам:

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