季淳卿 发表于 2021-4-23 16:28:25

C语言输出的数据怎么可以对其 不会乱

// 请问怎么让输入的数据 输出出来可以对其 我现在的效果会随着输入的字数变化 对不齐 我是直接用|竖线做的 各位大佬可以运行我的代码看一下

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100

struct xueshengkaoqin
{
        char kc;       
        char name;
    int id;
} xskq; /*   学生考勤    */

void tou();      /*   头部    */
void kaoqin();   /* 日常考勤*/
void kqxh();   /* 考勤循环*/
void kqcz();    /* 考勤查找*/
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");
          break;
        }
       
}

void kaoqin()

{       
    int i;
    for(i=0;i<N;i++)
    {
    printf("\n");       
        printf("*************    请输入日常考勤    *************\n");
        printf("\t考勤违规情况(迟到、早退、旷课、请假缺课)\t\n");
        printf("\n");
        printf("请输入学生名字\n");
        scanf("%s",xskq.name);
        fflush(stdin);

        printf("请输入学生四位数的学号\n");
        scanf("%d",&xskq.id);
        fflush(stdin);
       
        printf("请输入第一节课\n");
        scanf("%s",&xskq.kc);
        fflush(stdin);
       
        printf("请输入第二节课\n");
        scanf("%s",&xskq.kc);
        fflush(stdin);
       
        printf("请输入第三节课\n");
        scanf("%s",&xskq.kc);
        fflush(stdin);
       
        printf("请输入第四节课\n");
        scanf("%s",&xskq.kc);
        fflush(stdin);
       
        printf("请输入第五节课\n");
        scanf("%s",&xskq.kc);
        fflush(stdin);
       
        printf("请输入第六节课\n");
        scanf("%s",&xskq.kc);
        fflush(stdin);
       
        printf("请输入第七节课\n");
        scanf("%s",&xskq.kc);
        fflush(stdin);
       
        printf("请输入第八节课\n");
        scanf("%s",&xskq.kc);
        fflush(stdin);
       
        printf("请输入第九节课\n");
        scanf("%s",&xskq.kc);
        fflush(stdin);
       
        printf("请输入第十节课\n");
        scanf("%s",&xskq.kc);
        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();
                  }
                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')
              {
                  kqcz();
                  break;
                  }
                  else if(z=='n')
                  {
                            tou();
                  }
                  else if(z!='y' || z!='n')
                  {
                            printf("\n");
                            printf("温馨提示输入错误 请重新输入\n");
                            printf("\n");
                      ckkc();
                  }
       
        }
}

void kqcz()//考勤查找
{
//        int z;
        char sname;
        int i;
        printf("请输入您要查找的学生\n");
        printf("\n");
        fflush(stdin);
        gets(sname);
        printf("\n");
                                               
        if(strcmp(sname,xskq.name)==0)
        {
                printf("|| 名字 || 学号 || 第一节 || 第二节 || 第三节 || 第四节 || 第五节 || 第六节 || 第七节 || 第八节 || 第九节 || 第十节 ||\n");
                printf
                (               
                "|| %s || %-10d||%s||%s||%s||%s||%s||%s||%s||%s||%s||%s||\n",
                xskq.name,xskq.id,xskq.kc,xskq.kc,xskq.kc,xskq.kc,
                xskq.kc,xskq.kc,xskq.kc,xskq.kc,xskq.kc,xskq.kc,
                xskq.kc
                );               
//        tou();
}
}



ba21 发表于 2021-4-23 16:37:54

统一用空格分格。。。上下字符长度对应就对齐了

季淳卿 发表于 2021-4-23 16:53:49

ba21 发表于 2021-4-23 16:37
统一用空格分格。。。上下字符长度对应就对齐了

因为我这个是先自己手动输入学生信息 ,然后选择查询可以查看,有些名字是三个字 有些是两个字的 不管是用空格还是\t 因为输入的字的数目不一样 它们每一行就对不齐不是会往后面退 ,就是往前面缩进每一行输入的字数不一样 就会对不齐

季淳卿 发表于 2021-4-23 17:06:06

ba21 发表于 2021-4-23 16:37
统一用空格分格。。。上下字符长度对应就对齐了

C:\Users\29681\Desktop

tian1234 发表于 2021-4-23 17:14:52

可以试试sprintf,我觉得应该可以解决你的问题,或者对输入的字符数进行判断
页: [1]
查看完整版本: C语言输出的数据怎么可以对其 不会乱