首先,你描述了“程序崩溃”,这点基本上是内存操作出现了问题。但是代码太长了,我告诉你自己先用printf定位一下看看是在哪里出现的崩溃(这个方法很土,但是很直观)。后来你说定位到了Cost 函数的scanf出错了。
这里的代码是scanf ("%s", mem); mem是局部数据,如果出错应该就是输入过长,导致数组越界了,但是猜想按照你的经验应该不会犯这种错误,或者是犯这种错误自己也能解决。所以往后面看:
while (!strcmp(mem, p->NUM._room))
{
p = p->next;
}
这段代码一看就不舒服,我前面说了程序崩溃基本上是内存操作出现了问题,这里的指针p在循环里一直没有保护,如果p为NULL了还做strcmp(mem, p->NUM._room)是会异常的,所以稍一注意就会发现while的循环条件有毛病了。