运行时please input the name:,然后直接是are you sure? y/n,中间没有。请各位帮忙
void Delete()
{ printf("\n\n\tplease input the name:\n");
gets(name1); p4=head;
if(strcmp(p4->name,name1)!=0&&p4!=NULL)
{ p4=p4->next;
}
if(strcmp(p4->name,name1)!=0&&p4==NULL)
printf("it's not exit in the addr-book!");
else
{ while(!strcmp(p4->next->name,name1)==0)
{ printf("are you sure? y/n");
scanf("%c",&x);
if(strcmp(x,"y")==0)
{
if(p4==head)
{
head=head->next;
free(p5);
}
else
{
p4->next=p5->next;
free(p5);
}
}
else
return;
}
}
}
参考答案:void
Delete(void)
{
struct node * p4, * p5;
printf("\n\n\tplease input the name:\n");
fflush(stdin);
gets(name1);
p4 = head;
while ( p4 != NULL && strcmp(p4->name, name1)!= 0 ) {
p5 = p4;
p4 = p4->next;
}
if( p4 == NULL )
printf( "it doesn`t exist in the addr-book!" );
else {
printf( "are you sure? y/n" );
scanf( "%c", &x );
fflush(stdin);
if( x == 'y' || x == 'Y') {
if( p4 == head && p4->next != NULL ) {
head = p4->next;
free(p4);
}
else if ( p4->next == NULL )
head = NULL;
else {
p5->next = p4->next;
free(p4);
}
}
}
}
你用的p4和p5是全局变量吧,那你要仔细阅读我改的程序,看懂了之后自己协调一下,因为我没有看到你的代码的上下文。
楼主,你不用跟我解释你这个函数干什么的,我当然知道是干什么的,不然我怎么能给你改。现在的问题是,你的全局变量的p4和p5,跟我这里的p4,p5好像是刚好反的,不过也无所谓,因为我这个函数里面的p4何p5是新声明的局部变量,不会影响到你的全局变量的。如果你怕不安全,就把我这个函数里面的p4和p5分别换成别的变量名就可以了比如说p和q。函数的功能没有变,就是你要的功能。如果有问题,你再告诉我。