Ваше состояние должно быть что-то вроде
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.
что тип данных в входной_файл в ?? .... ЕСЛИ вы взяли 'Filestream infile', это какой-то условный шестнадцатеричный номер, ссылающийся на память (очень большое число) –
Попробуйте открыть файл в двоичном режиме. – 0x499602D2
@AVIKDUTTA infile - это список целых чисел – BrandonTuley43