永发信息网

下面C语言程序有一个问题,求教。。

答案:4  悬赏:0  手机版
解决时间 2021-08-21 16:46
  • 提问者网友:感性作祟
  • 2021-08-21 09:17

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10
#define MAXSUB 3
int length;
typedef struct tagStudent_t
{
 char no[11];
 char name[20];
 int score[MAXSUB];
}Student;
char menu_select();
void input(Student * p);
void output(Student * p);
void searchByNo(Student * p);


void main()
{
 Student stus[MAXSIZE];
 Student * p=stus;
 while(1)
 {
  switch(menu_select())
  {
   case'1':
    input(p);
   break;
   case'2':
    searchByNo(p);
   printf("按任意键继续...");
   fflush(stdin);
   getchar();
   break;
   case'3':
    output(p);
   printf("按任意键继续...");
   fflush(stdin);
   getchar();
   break;
   case'0':
    printf("\n         谢谢使用!\n");
   exit(0);
  }
 }
}


char menu_select()
{
 char MenuItem;
 printf("\n");
 printf("***********************学生管理系统***********************\n");
 printf("********************************************************\n");
 printf("*************************主菜单**************************\n");
 printf("********************************************************\n");
 printf("                      1-------录入学生信息                                                \n");
 printf("                      2-------查询学生信息                                               \n");
 printf("                      3-------显示学生信息                                               \n");
 printf("                      0-------退出                                                            \n");
 printf("********************************************************\n");
 
 do
 {
  printf("\n       请输入选项(0~3)");
  fflush(stdin);
  scanf("%c",&MenuItem);
  getchar();
 }while(MenuItem<'0'||MenuItem>'3');
 return MenuItem;
}

 

void input(Student * p)
{
 int i,j;
 char cContinue;
 int flag=1;
 fflush(stdin);
 for(i=length;i<MAXSIZE-1;i++,p++)
 {
  printf("请输入第%d名学生的学号:",i+1);
  scanf("%s",&p->no);
  printf("请输入姓名:");
  scanf("%s",&p->name);
  for(j=0;j<MAXSUB;j++)
  {
   printf("请输入第%d门成绩: ",j+1);
   scanf("%d",&p->score[j]);
  }
  length++;
  do
  {
   flag=1;
   printf("需要继续录入成绩吗?(y/n)?");
   fflush(stdin);
   scanf("%c",&cContinue);
   getchar();
   switch(cContinue)
   {
         case'Y':
     case'y':
      flag=0;
     break;
           case'N':
       case'n':
       return;
   }
  }while(flag);
 }
}


void output(Student * p)
{
 int i,j;
 printf("学号          姓名            成绩1           成绩2            成绩3\n");
 printf("\n");
 for(i=0;i<length;i++,p++)
 {
  printf("% -6s% -14s",p->no,p->name);
for(j=0;j<MAXSUB;j++)
printf("%7d",p->score[j]);
printf("\n");
 }
}

 

void searchByNo(Student * p)
{
 p=p-length;
 char no[20];
 int i,j;
 printf("\n请输入学生学号: ");
 scanf("%s",no);
 for(i=0;i<length;i++,p++)
 if(strcmp(p->no,no)==0)
 {
        printf("学号  姓名   成绩1   成绩2   成绩3\n");
              printf("\n");
              printf("% -6s% -14s",p->no,p->name);
                 for(j=0;j<MAXSUB;j++)
                 printf("%7d",p->score[j]);
              
 }
 else 
 {
  printf("该生不存在!\n");}
}

整个程序编译都没有问题,但是查找函数SearchByNo(),执行结果不对,总是“该生不存在”。。

哪位大侠指教一下。。

最佳答案
  • 五星知识达人网友:十年萤火照君眠
  • 2021-08-21 10:30
p=p-length;将改为p=p-length*sizeof(struct tagStudent_t)应该就行了
全部回答
  • 1楼网友:梦中风几里
  • 2021-08-21 12:27

你应该在循环里加一个标志,一旦找到标志置一,最后在根据标志输出找不到的信息,你现在只要第一个不是就会输出找不到的信息了。

  • 2楼网友:妄饮晩冬酒
  • 2021-08-21 11:22

你这样写就算找到了也会输出不存在的。。思路应该是用for找到if(strcmp(p->no,no)==0)
成立的那个p。然后break,跳出for。后面加输出语句就可以了还有你这句查找函数的第一句p=p-length;什么意思?

  • 3楼网友:千杯敬自由
  • 2021-08-21 10:49
p=p-length; 什么意思,目的何在。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯