青亭浅 2022-12-06 00:00 采纳率: 88.2%
浏览 20
已结题

这为什么输入没有效果,只有输入1才有效果,二三四都没有

这串代码执行程序时只有输入1才能起作业,输入2,3时不起作用,可以看下为什么吗(代码还未写完);


```c

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<dos.h>
#include<string.h>
#include<conio.h>
#define FORMAT "%d%s%d\n"
#define DATA stu[i].num,stu[i].name,stu[i].classroom
#define LEN sizeof(struct student)
struct student{
    int num;
    char name[20];
    int classroom;
}; 
int num;
struct student stu[1000];
void menu1();
void menu2();
void input(); 
void show(); 
void serach();
int main()
{
    system("color e3\n");
    int n;
    char w;
    printf("\t\t\t***欢***迎***进***入***学***习***平***台******管***理***系***统\n");

    printf("\t\t\t\t\t\t请输入模式(T):"); 
    scanf("%c",&n);
    if(n=='T'||n=='t'){
        menu1(); 
        scanf("%d",&n);
        while(n){
            switch(n)
            {
                case 1:input();break; 
                case 2:serach();break;  
                case 3:printf("%d %s %d",stu[0].num,stu[0].name,stu[0].classroom);break; 
                case 4:show();break;
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                case 11:
                default:break;
            }
        printf("输入任意键将返回主菜单");
        getchar();
        menu1();
        scanf("%d",&n); 
        }
    }                      
    return 0;
}
void menu1(){
        system("cls");
        printf("\n\n\n\n");
        printf("\t\t\t\t   |--------------------------------------------|\n"); 
        printf("\t\t\t\t   |             学习平台管理系统               |\n");
        printf("\t\t\t\t   |1.录入学生信息(学号、姓名、班级)            |\n");
        printf("\t\t\t\t   |2.查找学生信息                              |\n");
        printf("\t\t\t\t   |3.新增试题                                  |\n");
        printf("\t\t\t\t   |4.更新积分                                  |\n");
        printf("\t\t\t\t   |5.计算学生等级                              |\n");
        printf("\t\t\t\t   |6.新增课程                                  |\n");
        printf("\t\t\t\t   |7.按某科成绩排序                            |\n");
        printf("\t\t\t\t   |8.将学生信息输出(按平均格式化)              |\n");
        printf("\t\t\t\t   |9.删除某门课程某个试题                      |\n");
        printf("\t\t\t\t   |10.将信息保存到文件中                       |\n");
        printf("\t\t\t\t   |11.从文件中导入信息                         |\n");
        printf("\t\t\t\t   |--------------------------------------------|\n"); 
        printf("\n\t\t\t\t                请输入模式(1~11):");
}
void input(){
    int i,m=0;
      char ch[2];
      FILE *fp;
      if((fp=fopen("data99.txt","a+"))==NULL)
      {
          printf("文件不存在!\n");
          return;
      }
      while(!feof(fp))
      {
          if(fread(&stu[m] ,LEN,1,fp)==1)
          {
              m++;
        }
      }
      fclose(fp);
      if(m==0)
      {
          printf("文件中没有记录!\n");
    }
      else
      {
        show();
      }
      if((fp=fopen("data99.txt","ab+"))==NULL)
      {
          printf("文件不存在!\n");
          return;
      }


      printf("输入学生信息(y/n):");
      scanf("%s",ch);
    while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
    {
        printf("学号:");
        scanf("%d",&stu[m].num);
        for(i=0;i<m;i++)
            if(stu[i].num==stu[m].num)
            {
                   printf("该序号已经存在了,按任意键继续!");
                getch();
                fclose(fp);
                return;
            }
         printf("姓名:");
         scanf("%s",stu[m].name);
         printf("C语言:");
        scanf("%d",&stu[m].classroom);
         if(fwrite(&stu[m],LEN,1,fp)!=1)
         {
             printf("不能保存!");
             getch();
         }
         else
         {
             printf("%s 被保存!\n",stu[m].name);
             m++;
         }
         printf("继续?(y/n):");
         scanf("%s",ch);
      }
      fclose(fp);
      printf("OK!\n");
      }
void show(){
    FILE *fp;
      int i,m=0;
      fp=fopen("data99.txt","rb");
      while(!feof(fp))
      {
          if(fread(&stu[m] ,LEN,1,fp)==1)
           m++;
       }
       fclose(fp);
    printf("%d",LEN);
       printf("学号    姓名          C语言 \t\n");
       for(i=0;i<m;i++)
    {
       printf(FORMAT,DATA);
    }
}
void serach(){
    FILE *fp;
      int snum,i,m=0;
      if((fp=fopen("data99.txt","rb"))==NULL)
     {
         printf("文件不存在!\n");
        return;
    }
      while(!feof(fp))
      if(fread(&stu[m],LEN,1,fp)==1)
      m++;
      fclose(fp);
      if(m==0)
    {
          printf("文件中没有记录!\n");
          return;
    }
      printf("请输入学号:");
      scanf("%d",&snum);
      for(i=0;i<m;i++)
    if(snum==stu[i].num)
    {
          printf("学号    姓名          C语言 \t\n");
          printf(FORMAT,DATA);
      break;
    }
      if(i==m) printf("没有找到这名学生!\n");
}

```

  • 写回答

2条回答 默认 最新

  • Norcor 2022-12-06 00:53
    关注

    问题很多,但不是2没有运行,输入2是执行了的。

    首先最大的问题是你在模式输入时,存储模式的变量n定义类型定义为了int,但实际scanf只有一个%c的字符。或许你应该找你老师好好给你理清楚char和int的差别了。
    之后的过程中,你将学号、姓名、成绩输入时,并没有做任何分隔,无论是空格还是分号,一个都没有
    在之后进行数据读取时,也是直接一次性读到,这也导致你的搜索根本没法根据学号实现,毕竟你的学号和姓名啥的合在一起又有什么方式辨别哪一段是学号呢
    设计过程细心些啊,骚年

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月25日
  • 创建了问题 12月6日

悬赏问题

  • ¥15 TeleScan不能修改bar
  • ¥100 请问我基于逐飞库写的这个有关于mp u6050传感器的函数,为什么输出的值是固定的?
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别
  • ¥15 使用Ant Design Pro vue的时候,使用环境变量的时候,构建报错是什么原因
  • ¥15 NRF24L01能发送但是不能接收
  • ¥15 想问一下这种情况怎么解决呢(关键词-file)