初学者求教简单的C语言问题?

定义变量:
struct student
{
char Name[96];
char Gender[16];
int Age;
char Education[96];
char Address[96];
long Tel;
struct student *next;
};
struct student *change1(char NAME[96],struct student *head);
struct student *change2(char NAME[96],struct student *head);
struct student *change3(char NAME[96],struct student *head);
char choice;

Switch-case选择部分:(这是某一Case下嵌套的子switch选择)
scanf("%c",&choice)
while(choice!=4)
{
switch(choice)
{ case 1: head=change1(NAME,head);
print(head);
break;
case 2: head=change2(NAME,head);
print(head);
break;
case 3: head=change3(NAME,head);
print(head);
break;
default:
printf("Invalid choice.\n\n");
break;
}
}
一个修改链表的子函数,Change1,Change2,Change3类同:

struct student *change1(char NAME[96],struct student *head)
{
struct student *pf,*pb;
for(pb=head;pb!=NULL;pb=pb->next)
{
if(strcmp(NAME,pb->Name)==0)
{
printf("Please insert New educate grade;");
scanf("%s",pb->Education);
}
}
return head;
}

链表已经由另一个函数创建,以上是负责修改的部分。现在的问题是,
1) 程序执行到case 1: head=change1(NAME,head)或Case2的这一步,不会跳进Change子函数,也不会执行自身Case的print,而是会直接跳到Case3的print语句执行打印。
2)链表节点中只有六个变量,但是打印后会在结尾出现"0,,,,,,,,,0",请问是什么意思?
多谢!

问题1:
将case 1, case 2, case 3
依次改作case '1',case '2', case '3'就好了。
因为scanf("%c",&choice);这句表示choice是以字符形式接收输入的数据,所以case的形式应该也是字符的形式!

case部分如下修改就好了
scanf("%c",&choice)
while(choice!=‘4’)
{
scanf("%c",&choice)
switch(choice)
{
case ‘1’: head=change1(NAME,head);
print(head);
break;
case ‘2’: head=change2(NAME,head);
print(head);
break;
case ‘3’: head=change3(NAME,head);
print(head);
break;
default:
printf("Invalid choice.\n\n");
break;
}
}
意思是:
输入字符‘4’退出,
输入‘1’ ‘2’ ‘3’分别调用函数change1 change2 change3,
输入其他字符则打印Invalid choice,提示重新输入,直到输入字符‘4’才退出。

问题2:
可能1,是因为你的数组结尾不是‘\0',才导致打印不结束,直到遇到’\0'才结束!
可能2,数组存储越界,字符串拷贝时,覆盖了相应的‘\0'!
仔细检查一下吧!
要不直接把源码贴出来,我帮你解决,O(∩_∩)O~

不明白就追问吧!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-01
把while(choice!=4)这一句改成while((choice&15) != 4),再把switch(choice)改成switch(choice&15)
试试……
第2个回答  2013-06-01
switch(choice) case 1这样把字符型跟整型比较,一般都不会出现预料中的结果……
相似回答