鱼C论坛

 找回密码
 立即注册
查看: 1742|回复: 1

[已解决]C语言for循环赋值为0 函数调用后会替换上面所有输入的数值 只能输出最后一次数值

[复制链接]
发表于 2021-4-24 11:47:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
// 目前我还只作了第一个“日常考情”的部分  因为我是一个一个询问需不需要执行下一个操作 我“日常考情”的函数我用来一个for循环,我如果我第一次输入玩“日常考情”后,
//在选择“继续添加学生考情”输入的信息(也就是第二次输入)在“日常考情”的for循环中因为我给i赋值是为0 ,它会是替换掉第一个输入的信息
//各位大佬求解求解 我学了将近半个月左右的C语言  做的一个学生管理的项目 有很多地方都不是搞不太清楚
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100

struct xueshengkaoqin
{
        char kc[10][10];  /*   课程    */       
          char name[N];     /*   姓名    */       
    int id;           /*   学号ID  */
} xskq[N]; /*   学生考勤    */

void tou();      /*   头部    */
void kaoqin();   /* 日常考勤  */
void kqxh();     /* 考勤循环  */
void czlx();    /* 查找学生类型 单个或者全部  */
void kqcz();    /* 单个学生考勤查找  */
void qbkqcz();  /* 全部学生考勤查找  */
void ckkc();    /* 查看考情  */
void jiuqin();   /* 就寝记录  */
void weisheng(); /* 日常卫生  */
void daode();    /* 道德品质  */
void biaoxian(); /* 课堂表现  */
void zhiye();    /* 作业完成  */
void zhoukao();  /*   周考    */
void yuekao();   /*   月考    */
void xiangmu();  /* 课程项目  */
void zongchengji();  /*课程总成绩 */
void baogao();   /* 打印报告  */
void shezhi();  /* 系统设置  */

int main()

{
       
//         while(1)
        tou();
       
}

void tou()

  {
          int n;
          printf("\n");
          printf("\n");
          printf("\n");
        printf("****************************欢迎来到学生管理系统***************************  \n");
        printf("\n");
        printf("\t\t\t      请输入所需操作\n");
        printf("\n");
        printf("\t\t\t      1.日常考勤\n");
        printf("\t\t\t      2.就寝记录\n");
        printf("\t\t\t      3.日常卫生\n");
        printf("\t\t\t      4.道德品质\n");
        printf("\t\t\t      5.课堂表现\n");
        printf("\t\t\t      6.作业完成\n");
        printf("\t\t\t      7.周考\n");
        printf("\t\t\t      8.月考\n");
        printf("\t\t\t      9.课程项目\n");
        printf("\t\t\t      10.课程总成绩\n");
        printf("\t\t\t      11.打印报告\n");
        printf("\t\t\t      12.系统设置\n");
        printf("\n");
        printf("***************************************************************************  \n");
        printf("\n");
       
    scanf("%d",&n);   
    printf("\n");
        switch(n)       
        {
               
        case 1 :
            kaoqin();
                break;
               
        default:
            printf("请重新输入选择(1-12)\n");
            tou();
            break;
        }
       
}

void kaoqin() /* 日常考勤  */

  {       
    int i;
    for(i=0;i<N;i++)
    {
    printf("\n");       
        printf("**************************    请输入日常考勤    **************************\n");
         printf("\n");
        printf("\t       考勤违规情况(迟到、早退、旷课、请假缺课)\n");
         printf("\n");
        printf("     请管理老师(学生科、班主任老师)在每天5:00下班前记载好当天情况\n");
          printf("\n");
          printf("请输入学生名字\n");
          scanf("%s",xskq[i].name);
          fflush(stdin);

          printf("请输入学生四位数的学号\n");
          scanf("%d",&xskq[i].id);
          fflush(stdin);
         
          printf("请输入第一节课\n");
          scanf("%s",&xskq[i].kc[0]);
          fflush(stdin);
         
          printf("请输入第二节课\n");
          scanf("%s",&xskq[i].kc[1]);
          fflush(stdin);
         
          printf("请输入第三节课\n");
          scanf("%s",&xskq[i].kc[2]);
          fflush(stdin);
         
          printf("请输入第四节课\n");
          scanf("%s",&xskq[i].kc[3]);
          fflush(stdin);
         
          printf("请输入第五节课\n");
          scanf("%s",&xskq[i].kc[4]);
          fflush(stdin);
         
          printf("请输入第六节课\n");
          scanf("%s",&xskq[i].kc[5]);
          fflush(stdin);
         
          printf("请输入第七节课\n");
          scanf("%s",&xskq[i].kc[6]);
          fflush(stdin);
         
          printf("请输入第八节课\n");
          scanf("%s",&xskq[i].kc[7]);
          fflush(stdin);
         
          printf("请输入第九节课\n");
          scanf("%s",&xskq[i].kc[8]);
          fflush(stdin);
         
          printf("请输入第十节课\n");
          scanf("%s",&xskq[i].kc[9]);
          fflush(stdin);
         
         
    kqxh();
        break;
        }
            
  }
  
  
void kqxh() //考勤循环
{
        char c;
        int i;
        for(i=0;i<N;i++)
        {
                 printf("\n");
                  printf("是否继续添加学生考勤(y或n)\n");
                  fflush(stdin);
                  scanf("%c",&c);
                 if(c=='y')
              {
                    kaoqin(); /* 再次跳转日常考勤  */
                    return kaoqin() ;
                  }
                else if(c=='n')
                {
                            ckkc();  /* 查看考情  */
                }
                else if(c!='y' || c!='n')
                {
                            printf("\n");
                            printf("温馨提示输入错误 请重新输入\n");
                            printf("\n");
                      kqxh();
                }
       
        }
}   

void ckkc()  /* 查看考情  */
{
        char z;
        int j;
        for(j=0;j<N;j++)
        {
                 printf("\n");
                  printf("是否需要查看学生的考勤情况(y或n)\n");
                  fflush(stdin);
                  scanf("%c",&z);
                 if(z=='y')
              {
                    czlx();/* 查找学生类型 单个或者全部  */
//                    break;
                  }
                  else if(z=='n')
                  {
                            tou(); /* 返回头部  */
                  }
                  else if(z!='y' || z!='n')
                  {
                            printf("\n");
                            printf("温馨提示输入错误 请重新输入\n");
                            printf("\n");
                      ckkc();
                  }
       
        }
}

void czlx()/* 查找学生类型 单个或者全部  */
{
        char z;
        int j;
        for(j=0;j<N;j++)
        {
                printf("\n查找单个学生请输入(y)查找所有学生请输入(s)\n");
            fflush(stdin);
            scanf("%c",&z);
            if(z=='y')
            {
                    kqcz(); /*单个学生考勤查找*/
                   
                }
                else if(z=='s')
                {
                        qbkqcz();/* 全部学生考勤查找  */
//                        return
                }
                else if(z!='y' || z!='s')
                {
                        printf("\n");
                            printf("温馨提示输入错误 请重新输入\n");
                            printf("\n");
                      czlx();
                }
        }
               
}









void qbkqcz()/* 全部学生考勤查找  */
{
//            char sname[N];
            int i;
            for(int i=0;i<N;i++)
                {
                printf("||    名字   ||    学号   ||    第一节   ||    第二节    ||    第三节    ||    第四节    ||    第五节    ||    第六节    ||    第七节   ||    第八节     ||     第九节    ||    第十节    ||\n");
        printf("\n");
                printf
                (               
                "    %-14s %-14d %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s  \n",
                xskq[i].name,xskq[i].id,xskq[i].kc[0],xskq[i].kc[1],xskq[i].kc[2],xskq[i].kc[3],
                xskq[i].kc[4],xskq[i].kc[5],xskq[i].kc[6],xskq[i].kc[7],xskq[i].kc[8],xskq[i].kc[9],
                xskq[i].kc[10]
                ) ;
                tou();
                }
}







void kqcz()//单个学生考勤查找
{
//        int z;
        char sname[N];
        int i;
        printf("\n");
        printf("请输入您要查找的学生\n");
        fflush(stdin);
        gets(sname);
        printf("\n");
                                               
        if(strcmp(sname,xskq[i].name)==0)
        {
                printf("||    名字   ||    学号   ||    第一节   ||    第二节    ||    第三节    ||    第四节    ||    第五节    ||    第六节    ||    第七节   ||    第八节     ||     第九节    ||    第十节    ||\n");
        printf("\n");
                printf
                (               
                "    %-14s %-14d %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s %-14s  \n",
                xskq[i].name,xskq[i].id,xskq[i].kc[0],xskq[i].kc[1],xskq[i].kc[2],xskq[i].kc[3],
                xskq[i].kc[4],xskq[i].kc[5],xskq[i].kc[6],xskq[i].kc[7],xskq[i].kc[8],xskq[i].kc[9],
                xskq[i].kc[10]
                );               
           tou();
    }
    else
        {
                printf("抱歉为查找学生信息 请重新查找\n");
                printf("\n");
                kqcz();
        }
}



最佳答案
2021-4-24 20:19:41
首先,我建议你把所有的
fflush(stdin);
换成
getchar();

刷新缓冲区最好不要用fflush(stdin)
这玩意行为其实是未定义的  而且  你程序里 缓冲区也就总是有'\n'一个字符
getchar够用了

其次,我建议你所有变量声明即初始化,不要咔咔咔 声明一堆变量,又不初始化
我看你的程序  甚至还有明明上面声明了一个 i   然后在循环里又声明一次

还有一件事,scanf 获取字符串是没有终止符的,我也不推荐用scanf获取用户输入的字符串
最好是自己用getchar写一个,也不是很难

再然后,你那个获取用户输入课程,简直辣眼睛,用个循环不就完事了  写那么长....

嘛,我也不知道你用的啥编译器,反正尽量注意变量的初始化吧...
-------------------------------------------------------------------------------------
void kqcz()//单个学生考勤查找   ---->  这个函数里的 i 没有初始化

void qbkqcz()/* 全部学生考勤查找  */   ----->   这个函数里的 i 重定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-24 20:19:41 | 显示全部楼层    本楼为最佳答案   
首先,我建议你把所有的
fflush(stdin);
换成
getchar();

刷新缓冲区最好不要用fflush(stdin)
这玩意行为其实是未定义的  而且  你程序里 缓冲区也就总是有'\n'一个字符
getchar够用了

其次,我建议你所有变量声明即初始化,不要咔咔咔 声明一堆变量,又不初始化
我看你的程序  甚至还有明明上面声明了一个 i   然后在循环里又声明一次

还有一件事,scanf 获取字符串是没有终止符的,我也不推荐用scanf获取用户输入的字符串
最好是自己用getchar写一个,也不是很难

再然后,你那个获取用户输入课程,简直辣眼睛,用个循环不就完事了  写那么长....

嘛,我也不知道你用的啥编译器,反正尽量注意变量的初始化吧...
-------------------------------------------------------------------------------------
void kqcz()//单个学生考勤查找   ---->  这个函数里的 i 没有初始化

void qbkqcz()/* 全部学生考勤查找  */   ----->   这个函数里的 i 重定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 15:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表