当前位置: 代码迷 >> C语言 >> [求助]偶实在是想不出来该怎么改了.请大家帮帮忙!非常感谢!
  详细解决方案

[求助]偶实在是想不出来该怎么改了.请大家帮帮忙!非常感谢!

热度:701   发布时间:2007-04-11 17:14:13.0
[求助]偶实在是想不出来该怎么改了.请大家帮帮忙!非常感谢!

#include<stdio.h>
#include<iostream.h>
#include<string.h>

struct Student{
char cStuName[10];
char cPassword[8];
char cMajor[10];
Student* pNextStu;
};

struct HeadNode{
int nCount;
Student* pFirstStu;
};

void login(HeadNode* pHeader);
void zhuce(HeadNode* pHeader);
void main()
{
HeadNode *pHeader=new HeadNode;
int i=0,j=0;
pHeader->nCount=0;
pHeader->pFirstStu=NULL;

while(i<6){
printf("输入数字选择进入以下状态.");
printf("1.注册");
printf("2.登陆");
printf("3.个人信息");
printf("4.选课");
printf("5.已修课程");
printf("6.退出\n");
printf("You choice:");
scanf("%d",&i);
switch(i)
{
case 1:printf("注册");
zhuce(pHeader);
i=0;
break;
case 2:printf("登陆");
login(pHeader);
break;
case 3:printf("个人信息");

break;
case 4:printf("选课");

break;
case 5:printf("已修课程");

break;
case 6:printf("退出");

break;
default:break;
}
}
}
void zhuce(HeadNode* pHeader)
{
Student* pNewStu=new Student;

printf("输入帐号:");
cin>>pNewStu->cStuName;
if(strlen(pNewStu->cStuName)==0){
cout<<"You fail to registe."<<endl;
return;
}
printf("输入密码:");
cin>>pNewStu->cPassword;
cout<<"You are successful to registe!"<<endl;

pNewStu->pNextStu=pHeader->pFirstStu;
pHeader->pFirstStu=pNewStu;
return;

}

void login(HeadNode* pHeader)
{
char pStuName[10];
char pPassword[8];
printf("输入帐号:");
cin>>pStuName;
printf("输入密码:");
cin>>pPassword;
Student* pMove;
pMove=pHeader->pFirstStu;
while((strcmp(pMove->cStuName,pStuName)!=0||strcmp(pMove->cPassword,pPassword)!=0)&&(pMove!=NULL))
pMove=pMove->pNextStu;
if(pMove!=NULL)
cout<<"you are successful to login!"<<endl;
else
cout<<"you are illegal user!"<<endl;
}

这是一个学生选课系统的程序,只写了注册和登陆的函数.
但是,注册好了以后,在登陆的时候,不管有没有注册过,显示的结果都是"you are successful to login!".
请大家帮帮忙,看下是哪里出错了! 偶想了一个下午了.......... 谢谢先!!!

[此贴子已经被作者于2007-4-11 17:15:21编辑过]

搜索更多相关的解决方案: pHeader  HeadNode  void  Student  include  

----------------解决方案--------------------------------------------------------
while((strcmp(pMove->cStuName,pStuName)!=0||strcmp(pMove->cPassword,pPassword)!=0)&&(pMove!=NULL))
pMove=pMove->pNextStu;
这句好像有问题,我没上机运行,等会上去调试调试再说
----------------解决方案--------------------------------------------------------
我也觉得是那里有问题,可是不知道该怎么改啊!

谢谢楼上的同学....
----------------解决方案--------------------------------------------------------
LZ用的是什么编译器啊?
----------------解决方案--------------------------------------------------------
Microsoft Visual C++ 6.0
----------------解决方案--------------------------------------------------------
O,C++。
----------------解决方案--------------------------------------------------------

哪位大侠!! 帮个忙啊... !!! 小女子.在此先谢谢了~~~~~!


这个问题.....实在是很捆扰!............


----------------解决方案--------------------------------------------------------
while((strcmp(pMove->cStuName,pStuName)!=0||strcmp(pMove->cPassword,pPassword)!=0)&&(pMove!=NULL))
改为
while((pMove!=NULL)&&(strcmp(pMove->cStuName,pStuName)!=0||strcmp(pMove->cPassword,pPassword)!=0))
就可以了

如果运行程序后没有注册过而直接登陆,pMove为空指针,执行到while语句这里调用strcmp(pMove->cStuName,pStuName)函数就会出现内存空间不能访问的错误,因为此时pMove->cStuName是没有定义的

(pMove!=NULL)移到前面后先判断pMove是否为空,如果为空则执行while循环后面的语句,不再判断(strcmp(pMove->cStuName,pStuName)!=0||strcmp(pMove->cPassword,pPassword)!=0)的值

[此贴子已经被作者于2007-4-13 14:45:54编辑过]


----------------解决方案--------------------------------------------------------
哇..........!!!
感谢啊!!!!!
谢谢楼上的GG~~~~~~~~~~~~!

谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!!!!!
----------------解决方案--------------------------------------------------------
  相关解决方案