Чтение в вектор из .txt файла c ++ - PullRequest
1 голос
/ 19 апреля 2020

Так что мне нужно сделать программу, которая действует как виртуальный словарь. Хотя я не хочу, чтобы кто-то писал свой код для меня, я был бы признателен за некоторые отзывы о моем коде и, возможно, за точку в правильном направлении, чтобы найти некоторую информацию о проблеме, с которой я столкнулся.

Большая часть моей программы работает нормально, у меня возникают проблемы с заполнением моего вектора из файла .txt, и, по общему признанию, я действительно не понимаю, как это работает.

Вот что я использовал:

    ifstream myfile(filename);
    if (myfile.is_open())
    {
        string Line;
        string buffer;
        string currentWordType = "none";
        string currentWord = "none";
        string currentWordDef = "none";
        while (!myfile.eof())

        getline(myfile, buffer);
        currentWordType = buffer;

        getline(myfile, buffer);

        currentWord = buffer;

        getline(myfile, buffer);

        currentWordDef = buffer;

        Word newWord(currentWordType, currentWord, currentWordDef);
        wordList.push_back(newWord);

    }
    myfile.close();

Опять же, я точно не ищу кого-то, кто мог бы сделать это для меня, просто, может быть, указать, что какая-то область ошиблась, и указать мне в правильном направлении.

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Чтобы прочитать три строки из каждой строки, вам нужно al oop ... но вместо того, чтобы просто проверять eof

while (!myfile.eof())

, мы проверяем все состояния ошибок потока

while( myfile ){ ...
};

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

      std::string currentWordType;
      if( ! getline(myfile, currentWordType)) {
          break;
      }
      std::string currentWord;
      if( ! getline(myfile, currentWord)) {
          break;
      }
      std::string currentWordDef;
      if( ! getline(myfile, currentWordDef)) {
          break;
      }

После этого мы можем добавить Word к wordList, как и раньше.

Word newWord(currentWordType, currentWord, currentWordDef);
wordList.push_back(newWord);

См. Рабочий пример здесь

В качестве альтернативы вы можете выполнить синтаксический анализ внутри условия

while( myfile >> currentWordType >> currentWord >> currentWordDef ) {     
    Word newWord(currentWordType, currentWord, currentWordDef);
    wordList.push_back(newWord);      
};

См. Рабочий пример здесь

0 голосов
/ 19 апреля 2020

есть время, когда l oop вы забыли {}, в этом случае он будет запускать только следующую строку, которая:

getline(myfile, buffer);

, пока не достигнет eof, что означает, что он будет перезаписывать его каждый время. если вы можете исправить код, чтобы мы знали, что это не проблема. также вы можете опубликовать, какую именно ошибку вы получаете, или какой вывод вы получаете, это поможет.

...