Я работаю над другим школьным проектом, частью которого я должен взять данные из TXT-файла и преобразовать его в вектор смешанного типа ..., который содержит два целые числа и строку. Я пробовал различные способы сделать это, и у меня это до того, куда вводится файл .txt и, надеюсь, отправляется в векторы. Моя трудность возникает, когда я пытаюсь делать вещи с помощью векторов. Мой сегмент кода выглядит следующим образом (я объясню, что вещи для с комментариями):C++ Создание вектора из данных файла .txt
bool ReadPeopleFromFile(int argc, char* argv[], vector<Person> &people) {
Person tmpPrsn;
int tmpAge;
string tmpGender;
int tmpAnualIncome;
ifstream PeopleFile("dev_people.txt"); // Try to open file
if (!PeopleFile.is_open()) {
cout << "Could not open file.\n";
return true; // indicates error
}
cout << "Starting" << endl;
while (!PeopleFile.eof()) {
PeopleFile >> tmpAge;
PeopleFile >> tmpGender;
PeopleFile >> tmpAnualIncome;
tmpPrsn.SetData(tmpAge, tmpGender, tmpAnualIncome);
tmpPrsn.Print();
people.push_back(tmpPrsn); // Need to look at this!!!
}
PeopleFile.close();
cout << "Finished reading file." << endl;
return false;
}
//I have a function that gets the user input... I took it out for this post.
vector<Person> ptntlCstmrs;
// Return people within the given age range.
vector<Person> GetPeopleWithQualifyingCharacteristics(vector<Person> ppl, int AgelowerRange, int AgeupperRange, string DesiredGender, int YIlowerRange, int YIupperRange) {
unsigned int i = 0;
unsigned int j = 0;
unsigned int k = 0;
vector<Person> pplInRange;
int age = 0;
string gender = "";
int yearlyIncome = 0;
for (i = 0; i < ppl.size(); ++i) {
for (j = 0; j < ppl.size(); ++j) {
for (k = 0; k < ppl.size(); ++k) {
age = ppl.at(i).GetAge();
gender = ppl.at(j).GetGender();
yearlyIncome = ppl.at(k).GetYearlyIncome();
if ((age >= AgelowerRange) && (age <= AgeupperRange) && (gender == DesiredGender || gender == "Any") && (yearlyIncome >= YIlowerRange) && (yearlyIncome <= YIupperRange)) {
ptntlCstmrs.push_back(ppl.at(i));
}
}
} // I know this section is messed up... I can't figure out how to get this part to work. What I'm trying to do is take the input, and filter it based on the user-inputted criteria. Nothing that I have done has worked.
}
return pplInRange;
}
int main(int argc, char* argv[]) {
vector<Person> ptntlCstmrs;
bool hadError = false;
int ageLowerRange = 0;
int ageUpperRange = 0;
string desiredGender = "";
int yearlyIncomeLowerRange = 0;
int yearlyIncomeUpperRange = 0;
hadError = ReadPeopleFromFile(argc, argv, ptntlCstmrs);
if (hadError) {
return 1; // indicates error
}
GetUserInput(ageLowerRange, ageUpperRange, desiredGender, yearlyIncomeLowerRange, yearlyIncomeUpperRange);
ptntlCstmrs = GetPeopleWithQualifyingCharacteristics(ptntlCstmrs, ageLowerRange, ageUpperRange, desiredGender, yearlyIncomeLowerRange, yearlyIncomeUpperRange);
cout << "\nNumber of potential customers = " << ptntlCstmrs.size() << endl;
}
я включил кучу этого материала только в случае, если некоторые из моих ссылок выключены, но я не думаю, что так , Он также рассказывает вам, с чем я работаю. Я хотел бы помочь выяснить, как получить критерии для фактического сортировки векторов, а затем распечатать, сколько из этих векторов будет работать с введенными пользователем данными. Спасибо заранее!
Возможно, не ваша проблема, но вы должны прочитать следующее: http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong –
Я не понимаю, как вы используете трех- вложенные циклы, чтобы получить критерии. Вы получаете информацию о человеке 'i', person' j' и person 'k'. Разве вы не должны получать критерии «i» и видеть, соответствует ли он критериям? Другими словами, один цикл на 'i'? – PaulMcKenzie
@PaulMcKenzie Это может быть ... Я пытался структурировать его таким образом, но он терпел неудачу каждый раз. Можете ли вы показать мне, как это будет правильно структурировано? – Danny