2014-12-05 4 views
1
if (infile.is_open()) 
    { 
     int count = 0; 
     while (infile) 
     { 
      string author, ratings; 
      getline(infile, author); 

      if (author != "") 
      { 
       getline(infile, ratings); 

      // TODO: Create new User object 
      User newuser(author, ratings); 

      // TODO: Add new User object to vector 
      userList.push_back(newuser); 

      count++; 
     } 
    } 
    cout << count << " users read in. Closing user file." << endl; 

Результат для этого, что я получаю, состоит в том, что из текстового файла было прочитано 86 пользователей. правильный вывод должен быть 32. Я думаю, что это потому, что я использую цикл while, но я не совсем уверен.Неправильное добавление файла

+0

что тип данных в входной_файл в ?? .... ЕСЛИ вы взяли 'Filestream infile', это какой-то условный шестнадцатеричный номер, ссылающийся на память (очень большое число) –

+0

Попробуйте открыть файл в двоичном режиме. – 0x499602D2

+0

@AVIKDUTTA infile - это список целых чисел – BrandonTuley43

ответ

2

Ваше состояние должно быть что-то вроде

while (getline(author, infile) && getline(ratings, infile)) { 
    // validate input, then process it 
} 

Тогда если (infile.open()) становится тривиальным. В коде, который вы отправили, отсутствует «}», из-за чего трудно определить, откуда исходит ваша ошибка подсчета, или, может быть, это просто причина, увеличивая ваш счет в неправильном месте. Пожалуйста, убедитесь, что ваши примеры полны и, возможно, даже скомпилированы.

Небольшой совет, вы можете просто написать

userList.push_back(User(author, ratings)); 

EDIT: Я создал этот минимальный тестовый код (для вас) и протестировали его на следующий файл, в результате чего следующий вывод. Можешь подтвердить? Обратите внимание: текущая программа не принимает новые строки в вашем файле, например. однако для группировки различных пользователей эта функция легко добавляется, как только базовая программа работает.

Код:

#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 

using namespace std; 

struct User { 
    string author, ratings; 
    User(string auth, string rat) 
     : author(auth), ratings(rat) {} 
}; 

int main() 
{ 
    ifstream ist("test.txt"); 
    if (!ist) { 
     cout << "Could not open file test.txt\n"; 
     return 1; 
    } 

    vector<User> userList; 
    string author, ratings; 
    size_t count = 0; 
    while (getline(ist, author) && getline(ist, ratings)) { 
     if (author != "" && ratings != "") { 
      userList.push_back(User(author, ratings)); 
      ++count; // in this case, count++ is equivalent 
     } 
    } 
    cout << count << " users read in. Closing user file.\n"; 
} 

Файл test.txt

foo 
bar 
foobar 
lalilu 
myTotalUsersAre 
3 

Выход:

3 users read in. Closing user file. 
+0

мой файл компилируется, и это был мой вывод. Просто верьте, что я пропустил это в пасте извините! – BrandonTuley43

Смежные вопросы