В вашем search()
методе есть цикл:
while(current->ccode!=c_code)
{
prev=current;
current=current->next;
}
что случилось, когда код не найден? Вы продолжаете после окончания связанного списка.
Кроме того, вам нужно сравнить содержимое, а не адрес, поэтому вы должны использовать strcmp
.
для решения проблемы должно быть:
while(current && strcmp (current->ccode, c_code))
{
prev=current;
current=current->next;
}
Другая проблема - это метод gets()
. Вы должны fflush(stdin)
ПЕРЕД gets()
, в противном случае gets()
будет читать только неотредурованный CR предыдущего ввода (конец строки).
если вы хотите вместо fflush(stdin)
, вы можете использовать метод eatwhites, например:
istream& eatwhites(istream& stream)
{
// to define white spaces manually:
//const string skip=" \t\r\n";
//while(string::npos != skip.find(stream.peek())){
// stream.ignore();
//}
//or just use isspace:
while(isspace(stream.peek())){
stream.ignore();
}
return stream;
}
и позвоните до gets()
: eatwhites(stdin);
Этот метод пропускает белые символы и помещает чтение в начало данных, чтобы вы не читали пустую строку, оставленную предыдущим вводом ...
Другое дело: лучше использовать std::getline();
и работать с std::string
вместо массивов символов.