c语言 添加学生个人信息,查看学生信息

#include <stdio.h>

int main(int argc, char **argv)
{
    //创建几个存储个人信息的二维数组并初始化
    char name[][20] = {"eiop", "xiaoqing", "xiaofang"};
    char sex[][20] = {"M", "W", "M"};
    char height[][20] = {"180", "165", "177"};
    char score[][20] = {"96.4", "93.52", "44.33"};

    int rows = sizeof(name) / sizeof(name[0]); // 获取二维数组的行数
    // printf("你有%d个学生信息\n",rows);

    while (1)
    {
        printf("=============================\n");
        printf("输入1:添加学生用户信息\n");
        printf("输入2:查看所有学生信息\n");
        printf("输入q:退出程序\n");
        printf("=============================\n");

        char n = 0;
        scanf("%c", &n);
        while (getchar() != '\n'); // 清空缓冲区

        if (n == 'q') // 如果输入了q则退出循环
            break;

        switch (n)
        {
        case '1':
            printf("请输入添加学生的姓名\n");
            scanf("%s", name[rows]);
            while (getchar() != '\n');

            printf("请输入添加学生的性别\n");
            scanf("%s", sex[rows]);
            while (getchar() != '\n');

            printf("请输入添加学生的身高\n");
            scanf("%s", height[rows]);
            while (getchar() != '\n');

            printf("请输入添加学生的分数\n");
            scanf("%s", score[rows]);

            printf("输入完成!\n");
            while (getchar() != '\n');

            rows++; // 更新行数
            break;
        case '2':
            /*
                %-10s,%-8 .... 是一个格式控制符,用于按照左对齐的方式打印字符串,
                并且限制宽度为10,8...个字符。这样可以在输出对齐的同时,
                指定字符串的显示宽度。
            */
            printf("所有学生信息如下:\n");
            printf("===================================\n");
            printf("%-10s %-8s %-9s %-6s\n", "name", "sex", "height", "score"); //
            printf("===================================\n");
            for (int i = 0; i < rows; i++)//遍历打印数组内容
            {
                printf("%-11s %-8s %-9s %-6s\n", name[i], sex[i], height[i], score[i]); 
            }
            printf("\n");
            break;

        default:
            printf("输入错误,请重新输入!\n");
            break;
        }
    }

    return 0;
}

二维数组:

    char name[][20] = {"eiop", "xiaoqing", "xiaofang"};
    char sex[][20] = {"M", "W", "M"};
    char height[][20] = {"180", "165", "177"};
    char score[][20] = {"96.4", "93.52", "44.33"};

char name[][20] = {"eiop", "xiaoqing", "xiaofang"};

char name[3][20] = {"eiop", "xiaoqing", "xiaofang"};

这两个是存储的数据是相同的,不同的是name[3][20]已经规定了最多能存储3行的内容。

3表示 说它只能够存储"eiop", "xiaoqing", "xiaofang"这三个字符串,

20表示的字符数组的长度为 20,也就是名字的长度不能超过20。

清空缓冲区:

 case '1':
            printf("请输入添加学生的姓名\n");
            scanf("%s", name[rows]);
            while (getchar() != '\n');

            printf("请输入添加学生的性别\n");
            scanf("%s", sex[rows]);
            while (getchar() != '\n');
            
            break;

在这段代码中,使用 while (getchar() != '\n'); 是为了清空输入缓冲区。

在使用 scanf 函数接收字符串输入时,如果用户输入的内容超过了指定的长度,可能会导致多余的字符残留在输入缓冲区中。而下一次读取用户输入时,这些多余的字符可能会被误读。

为了解决这个问题,我们使用 while (getchar() != '\n'); 语句读取并丢弃输入缓冲区中的所有字符,直到遇到换行符 \n 为止。这样可以确保在下一次读取用户输入时,输入缓冲区中不会有多余的字符。

这种做法通常在使用 scanf 函数后紧跟着读取字符输入时会比较有用,以确保输入缓冲区是干净的、没有残留。

 格式控制符(-):

        printf("所有学生信息如下:\n");
        printf("===================================\n");
        printf("%-10s %-8s %-9s %-6s\n", "name", "sex", "height", "score"); //
        printf("===================================\n");
        for (int i = 0; i < rows; i++)//遍历打印数组内容
        {
           printf("%-11s %-8s %-9s %-6s\n", name[i], sex[i], height[i], score[i]); 
        }

输出结果:

================================
name       sex      height    score 
================================
eiop           M        180       96.4  
xiaoqing    W        165       93.52 
xiaofang    M        177       44.33 

添加 - 标志会改变格式控制符的对齐方式,具体取决于使用的格式控制符和标志。

在 C 语言中,以下是常见的格式控制符及其对齐方式:

  • %s:字符串的对齐方式可以通过添加 - 标志实现左对齐,例如 %10s 表示右对齐,%-10s 表示左对齐。
  • %d 或 %i:整数值的对齐方式是默认的右对齐,可以通过添加 - 标志实现左对齐,例如 %5d 表示右对齐,%-5d 表示左对齐。
  • %f:浮点数的对齐方式是默认的右对齐,可以通过添加 - 标志实现左对齐,例如 %8.2f 表示宽度为 8 的右对齐,%-8.2f 表示宽度为 8 的左对齐。
  • %c:字符的对齐方式是无效的,因为字符只占用一个位置。

通过添加 - 标志,可以改变格式控制符的对齐方式,使得输出更符合需求,例如在表格输出或对齐需求更严格的场景中。

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值