m0_72636972 2022-09-09 19:21 采纳率: 85.7%
浏览 180
已结题

此代码中如何限制性别(只能输入男或女)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>//字符串头文件
void menu()    //显示菜单
{    printf("  *********************************** \n");    
printf("        学生信息管理系统    \n");  
  printf("  ***********************************\n");  
  printf("           系统功能菜单     \n");   
 printf("  *********************************** \n");    
printf("   *         1、录入学生信息          * \n");    printf("\n");   
 printf("     *         2、打印学生信息          * \n");    printf("\n");   
 printf("       *         3、保存学生信息          * \n"); 
   printf("\n");   
 printf("         *         4、统计学生信息          * \n");  
  printf("\n");    
printf("           *         5、查询学生信息          * \n");   
 printf("\n");   
 printf("             *         6、修改显示信息          * \n");  
  printf("\n");  
  printf("               *         7、删除学生信息          * \n"); 
   printf("\n");    
printf("                 *         8、退出系统              * \n");    
printf("\n");   
 printf("                    *        9、读取学生信息           \n");   
 printf("      *********************************** \n");
}
void jumpspace()
 {
    char ch = getchar();
}
//定义一个学生结构体
typedef struct _student
{   
 int num;      //学号    
char name[20];//姓名   
 char sex[10]; //性别   
 int age;      //年龄   
 int score;  //成绩
}student;
//节点
typedef struct _Node
{    
student stu;  //学生   
 struct _Node* pNext;//指向下一个结点
}Node;
Node* phead = NULL; //头结点
//录入学生信息
void Inputstudent()
{    
//创建一个新结点  
  Node* pNewNode = (Node*)malloc(sizeof(Node));   
 printf("输入学号: \n");
scanf_s("%d", &(pNewNode->stu.num), sizeof(student::num));   
 jumpspace();    
printf("请输入姓名: \n");
scanf_s("%s", &(pNewNode->stu.name), sizeof(student::name));   
 jumpspace();   
 printf("请输入性别: \n");    
scanf_s("%s", &pNewNode->stu.sex, sizeof(student::sex)); 
   printf("请输入年龄: \n");    
scanf_s("%d", &(pNewNode->stu.age), sizeof(student::age));    
printf("请输入成绩: \n"); 
 scanf_s("%d", &(pNewNode->stu.score), sizeof(student::score));  
  printf("学生信息录入成功!\n");  
 system("pause");//暂停    
system("cls");//清屏   
 if (phead == NULL)    
{
        phead = pNewNode;       
 phead->pNext = NULL;    
}    
else
  {  
      pNewNode->pNext = phead;      
      phead->pNext = pNewNode;        
phead->pNext->pNext = NULL;    
}
}
//打印学生信息
void Printstudent()
{   
 printf("  *********************************** \n");   
 printf("        学生信息管理系统    \n");    
printf("  ***********************************\n");    
printf("\t学号\t姓名\t性别\t年龄\t成绩\n");  
  printf("  ***********************************\n");   
 //遍历链表    
Node* p = phead;   
 while (p != NULL)    
{     
   printf("\t%d\t%s\t%s\t%d\t%d\n",            p->stu.num,            p->stu.name,            p->stu.sex,            p->stu.age,            p->stu.score);        p = p->pNext;    
}    
system("pause");//暂停   
 system("cls");//清屏
}
//保存学生信息
void Savestudent()
{   
 //打开文件    
FILE* fp;  
  errno_t err = fopen_s(&fp, "D:\\stuinfo.txt", "w");   
 if (fp == NULL)    
{        printf("打开文件失败!\n");      
  return;    
}    
//遍历链表    
Node* p = phead;    
while (p != NULL)    
{       
 fwrite(&p->stu, 1, sizeof(student), fp);      
  p = p->pNext; 
   }   
 //关闭文件    
fclose(fp);   
 printf("\n数据保存成功!\n");    
system("pause");//暂停    
system("cls");//清屏
}
//读取学生信息
void Readsttudent()
{    
student stu;   
 //打开文件    
FILE* fp;   
 errno_t err = fopen_s(&fp, "D:\\stuinfo.txt", "r");   
 if (fp == NULL) 
   {     
   printf("文件打开失败!\n");       
 return;    
}    
//读文件    
while (fread(&stu, 1, sizeof(student), fp))    
{      
  //创建一个新节点      
 Node* pNewNode = (Node*)malloc(sizeof(Node));
//申请一个空节点  
      pNewNode->pNext = NULL;        
memcpy(pNewNode, &stu, sizeof(student));//copy  
      //头插法       
 if (phead == NULL)  
      {     
       phead = pNewNode;    
    }       
 else     
   {     
       pNewNode->pNext = phead;     
       phead = pNewNode;   
  //统计学生信息
int Countstudent()
{   
 int Count = 0;//学生总数   
 //遍历链表   
 Node* p = phead;    
while (p != NULL)//尾结点的指针域->NULL    {    
    Count++;      
  p = p->pNext;    
}    
return Count;
}
//查找学生信息
Node* Findstudent()
{  
  int num;    
char name[20];  
  printf("请输入需要查找的学生的学号:\n");    scanf_s("%d", &num);   
 system("pause");//暂停 
  system("cls");//清屏   
 //遍历链表 
   Node* p = phead;    
while (p != NULL)   
 {    
    //strcmp字符串函数   
     if(p->stu.num==num  /*0==strcmp(p->stu.name,name)*/)        
    {     
       return p;     
       }        
p = p->pNext;    
}   
 return NULL;
}
//修改学生信息
void Modifystudent()
{  
  int num;  
  printf("请输入需要修改的学生信息的学号:\n");   
 scanf_s("%d", &num);  
  //遍历链表 
   Node* p = phead;    
while (p != NULL)  
  {   
     if (p->stu.num == num  )      
  {            
printf("请输入要修改的学生姓名 年龄 成绩:\n");          
  scanf_s("%c %d %d", &p->stu.name, &p->stu.age, &p->stu.score);          
 printf("修改成功!\n");        
    break;  
      }        
p = p->pNext;   
 }  
  if(p==NULL)  
  {        
printf("没有找到该学生信息!\n");    
}    
 system("pause");//暂停    
system("cls");//清屏
}
//删除学生信息
void Deletestudent()
{   
 int stunum;   
 printf("请输入要删除的学生的学号:\n");  
  scanf_s("%d", &stunum);
  //删除结点    
Node* p1, * p2;
//p2是备份的,可释放  
  //判断是否为头结点   
 if (phead->stu.num ==stunum)  
  {   
     p1 = phead;      
  phead = phead->pNext;        
free(p1);     
   system("pause");//暂停        
system("cls");//清屏     
   return;    
} 
   //不是头结点   
 Node* p = phead;   
     while (p->pNext != NULL)      
  {        
    if (p->pNext->stu.num == stunum)            {       
         p2 = p->pNext;           
  p->pNext = p->pNext->pNext;             
   free(p2);             
   system("pause");//暂停             
   system("cls");//清屏              
  return;         
   }         
   p = p->pNext;         
   if (p->pNext == NULL)//到了尾部    
        {               
 break;          
  }       
 }        
if (p->pNext == NULL)     
   {       
     printf("没有找到该学员!\n");       
 }       
 system("pause");//暂停      
  system("cls");//清屏
}  
int main()
{    
int choice;  
  while (1)   
 {    
    menu();  
scanf_s("%d", &choice);     
   jumpspace();        
switch (choice)      
  {      
  case 1:  //录入           
 Inputstudent();         
   jumpspace();          
  break;      
  case 2:   //打印          
  Printstudent();         
   break;        
case 3:   //保存          
  Savestudent();        
    break;       
 case 4:   //统计            
printf("学生总人数为:%d\n", Countstudent());          
  system("pause");//暂停          
  system("cls");//清屏           
 break;     
   case 5:   //查找    
    {      
      Node* p = Findstudent();           
 if (p != NULL)         
   {                
printf("学号:%d\t姓名:%s\t性别:%s\t年龄:%d\t成绩:%d\n", p->stu.num, p->stu.name, p->stu.sex, p->stu.age, p->stu.score);                system("pause");//暂停             
   system("cls");//清屏        
    }          
  else             
   printf("没有找到该学员!\n");          
  break;      
  }        
case 6:   //修改            
Modifystudent();          
  break;  
case 7:   //删除            
Deletestudent();           
 break;      
  case 8:   //退出           
 printf("goodbye!\n");          
  return 0;   
     case 9:   //读取          
  Readsttudent();          
  break;       
 default:          
  printf("输入有误,请重新输入!\n");        
    system("pause");//暂停           
 system("cls");//清屏          
  break;      
  }   
 }    
return 0;
}
  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2022-09-09 19:28
    关注

    不都采纳过了么,给你写的你也不认可,你到底要什麽
    第58,59行修改为:

    while(1)
    {
        printf("请输入性别(男或女): \n");    
        scanf_s("%s", &pNewNode->stu.sex, sizeof(student::sex));
        if(strcmp(pNewNode->str.sex,"男") != 0 && strcmp(pNewNode->str.sex,"女") != 0)
            printf("性别只能输入男或女,请重新输入\n");
        else
            break;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月14日
  • 已采纳回答 9月9日
  • 创建了问题 9月9日

悬赏问题

  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持