вопросы ostream Мой ostream оператор < <, кажется, не работает или что-то ещеostream оператора << не работает должным образом
ответ
Существует логическая ошибка в функции Customer::getHash
. Это может не решить вашу проблему, но она должна быть исправлена в любом случае.
int Customer::getHash(int hash)
{
string key = getLastname();
cout<<"key: "<<key<<endl;
// getFirstname();
// getID();
int i = 0;
// int j = 0;
// int k = 0;
for (i = 0; i < key.length(); i++)
{
i += (int)key[i]; // Problem.
// At this time, i may be greater than key.length().
}
// getFirstname();
// getID();
return i = i % hash;
}
Вы можете исправить это, используя другую переменную, чтобы сохранить временное значение хэш-функции.
int Customer::getHash(int hash)
{
string key = getLastname();
cout<<"key: "<<key<<endl;
int tempHash = 0;
int i = 0;
for (i = 0; i < key.length(); i++)
{
tempHash += (int)key[i];
}
return tempHash % hash;
}
Update
В Опубликованная коде, вы закомментировал оператор возврата в функции
istream &operator >> (istream &in, Customer &obj)
В качестве побочного эффекта, поведение
while (inputFile >> newCustomer)
не определено.
Раскоментируйте линия
//return in;
в функции. Это исправит еще одну ошибку. Надеюсь, это последний.
Update 2
Вы читаете слишком много информации в цикле while
.
// This line reads all the information of one customer
while (inputFile >> newCustomer)
{
//inputFile >> newCustomer;
string lastname;
// PROBLEM
// Now you are reading data corresponding to the next customer.
getline (inputFile, lastname, ' ');
while (inputFile.peek() == ' ')
inputFile.get();
string firstname;
getline (inputFile, firstname, ' ');
while (inputFile.peek() == ' ')
inputFile.get();
string id;
getline (inputFile, id);
buildCustomerList(cHeadPtr, cTailPtr, lastname, firstname, id);
customer.insert(newCustomer);
//cout<<lastname<<endl;
//cout<<firstname<<endl;
//cout<<id<<endl;
}
Изменить это:
while (inputFile >> newCustomer)
{
string lastname = newCustomer.getLastname();
string firstname = newCustomer.getFirstname();
string id = newCustomer.getID();
buildCustomerList(cHeadPtr, cTailPtr, lastname, firstname, id);
customer.insert(newCustomer);
}
О, я вижу свою ошибку. Благодаря! Правильно ли работает мой цикл for? Мне кажется, что здесь есть что-то очень простое, но я не могу его поймать !! Спасибо – kris
@kris, цикл 'for' выглядит хорошо для меня. –
@R Sahu, я отправил свою полную программу. Я думаю, может быть, когда я читаю файл и устанавливаю свои данные, что-то не так? – kris
ммм, я хотел бы представить (целое) ключ [я] может дать вам мусор данных из-за несоответствия размера ... – hanshenrik
мой размер 512, и размер который входит в getHash - 512. Что бы вы предложили? Спасибо – kris