Linux C语言基础 day8

目录

思维导图:

学习目标:

学习内容:

1. 字符数组

1.1 二维字符数组

1.1.1 格式

1.1.2 初始化

1.1.3 二维字符数组输入输出、求最值、排序

2. 函数

2.1 概念

关于函数的相关概念

2.2 函数的定义及调用

2.2.1 定义函数的格式

2.3 函数的分类

1. 无参无返回值函数

2、有参无返回值函数

3、无参有返回值函数

4、有参有返回值函数

例如:

课堂练习:

课外作业:


思维导图:


学习目标:

例如:

  • 一周掌握 C基础知识

学习内容:

1. 字符数组

1.1 二维字符数组

1.1.1 格式

        char 数组名[常量1][常量2];

        常量1:表示的是定义的字符串的个数

        参数2:表示的是每个字符串的最大长度+1

1.1.2 初始化

        1、单字符初始化:该方式跟二维整形数组一致

        2、字符串初始化:

                全部初始化:char arr[3][8] = {"apple", "banana", "orange"}; arr[0] arr[1] arr[2]

                特殊初始化:char arr[ ][8] = {"apple", "banana", "orange"}; //此时省略的第一维,会根据初始化字符串的个数确定

                部分初始化:char arr[5][8] = {"apple", "banana", "orange"}; //没有初始化的字符串 默认为空串

1.1.3 二维字符数组输入输出、求最值、排序

例如:

#include<stdio.h>
#include<string.h>
#define MAX 5
int main(int argc, const char *argv[])
{
    char arr[MAX][20]={""};
    char brr[MAX][20]={""};
    for (int i = 0; i < MAX; i++)
    {
        printf("请输入第%d个字符串:", i+1);
        scanf("%s", arr[i]);
    }
    //输出所有的字符串
    printf("目前的字符串分别是:");
    for(int i=0; i<MAX;i++)
    {
        printf("%s\t", arr[i]);
    }
    puts("");
    char max[20]={""};
    stpcpy(max,arr[0]);
    for(int i=0;i<MAX;i++){
        if(strcmp(max,arr[i])){
            strcpy(max,arr[i]);
        }
    }
    printf("最大字符串为:%s\n", max);
    //将所有字符串进行排序
    char temp[20]={""};
    for(int i=0;i<MAX;i++){
        for ( int j= 0; j < MAX-i; j++)
        {
            if(strcmp(arr[j],arr[j+1]) > 0){
                strcpy(temp,arr[i]);
                strcpy(arr[i],arr[i+1]);
                strcpy(arr[i+1],temp);
            }
        }
       
    }
     //输出排序后的结果
    printf("目前的字符串分别是:");
    for(int i=0; i<MAX;i++)
    {
        printf("%s\t", arr[i]);
    }
    puts("");
}

2. 函数

2.1 概念

        将能实现某些功能的代码封装成代码块,然后通过通过代码块的名字就能调用到该部分的代码,这样,在多次相同操作的场景下,可以减少由于重复代码导致的劳动量,这个代码块,就是函数,代码块的名字,就是函数名。

        例:strlen strcpy printf scanf atoi。

关于函数的相关概念

        主调函数:调用别的函数的函数叫做主调函数

        被调函数:被别的函数调用的那个函数称为被调函数

        形式参数:也称形参,定义函数时,括号里面的参数称为形参

        实际参数:也称实参,函数调用时,括号里面的参数称为实参

2.2 函数的定义及调用

2.2.1 定义函数的格式

        返回值类型 函数名(函数的形参列表){ 函数体; }

2.3 函数的分类

1. 无参无返回值函数

        该函数,仅仅只是单纯执行特定的代码,没有数据传入,也不需要返回结果,仅仅只是执行一个过程 函数定义格式: void 函数名(void) {} 例如:void print_menu(void);

2、有参无返回值函数

        该函数,需要主调函数传入给定的数据后,才能进行执行该功能,但是,执行结束后,没有返回结果 函数定义格式:void 函数名(形参列表) {} 例如:void print_arr(int arr[], int n);

3、无参有返回值函数

        该函数无需外界传入数据,直接执行内部语句,并且执行结束后,会向主调函数返回一个确定的数据 函数定义格式:返回值类型 函数名(void){} 例如:int getchar(void);

4、有参有返回值函数

        该函数需要外界提供对应的参数,执行函数体代码后,并向主调函数返回一个确定的值 函数定义格式:返回值类型 函数名(参数列表) {} 例如:int strlen(char *src);

例如:

#include<myhead.h>

//定义菜单函数
void print_menu()
{
        printf("\t\t======1、无参无返回值函数======\n");
        printf("\t\t======2、有参无返回值函数======\n");
        printf("\t\t======3、无参有返回值函数======\n");
        printf("\t\t======4、有参有返回值函数======\n");
        printf("\t\t======0、退出======\n");
}

//定义无参无返回值函数
void sum_1(void)
{
    int num,key;
    printf("请输入两个数:");
    scanf("%d%d", &num, &key);
    int sum = num + key;          //求两数的和
    printf("sum = %d\n", sum);
}

//定义有参无返回值函数
void sum_2(int m, int n)
{
    int sum = m+n;        //将传入的两个数据求和

    printf("sum = %d\n", sum);        //输出结果

}

//定义无参无返回值函数
int sum_3()
{
    int num,key;
    printf("请输入两个数:");
    scanf("%d%d", &num, &key);
    int sum = num + key;          //求两数的和

    //将求出的和值,返回值给主调函数使用
    return sum;
}

//定义有参有返回值函数
int sum_4(int m, int n)
{
    int sum = m+n;

    return sum;
}

/************************主程序****************************/
int main(int argc, const char *argv[])
{
    //做个菜单
    int menu = 0;
    while(1)
    {
        print_menu();           //调用菜单函数

        printf("请输入>>>");
        scanf("%d", &menu);
        getchar();

        //多分支选择
        switch(menu)
        {
        case 1:
            {
                sum_1();      //调用无参无返回值函数
            }
            break;

        case 2:
            {
                int num,key;         //这两个数据是主调函数中的
                printf("请输入两个数:");
                scanf("%d%d", &num, &key);    

                sum_2(num, key);        //调用有参无返回值函数

            }
            break;
        case 3:
            {
                //要求调用一个函数,不传递任何数据
                //并且要得到该函数的结果,由主调函数输出
                int sum = sum_3();      //无参有返回值函数调用

                printf("sum = %d\n", sum);
            }
            break;
        case 4:
            {
                int num,key;         //这两个数据是主调函数中的
                printf("请输入两个数:");
                scanf("%d%d", &num, &key);    
                
                int sum = sum_4(num, key);          //调用有参有返回值函数
                
                printf("sum = %d\n", sum);

            }
            break;
        case 0: goto END;
        default:printf("您输入的功能有误,请重新输入\n");
        }
    }

END:

    return 0;
}


课堂练习:

#include<stdio.h>
void print_menu()
{
        printf("\t\t======1、第一题======\n");
        printf("\t\t======2、第二题======\n");
        printf("\t\t======3、第三题======\n");
        printf("\t\t======0、退出======\n");
}
void max1(int num,int key){
    if(num > key){
        printf("最大值为%d\n",num);
    }else
    {
        printf("最大值为%d\n",key);
    }
    
}
int max2(){
    int a[5]={0};
    for (int  i = 0; i < 5; i++)
    {
        printf("请输入该数组的第%d个值",i+1);
        scanf("%d",&a[i]);
    }
    printf("\n");
    int max1=a[0];
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            if(max1 < a[j]){
                max1=a[j];
            }
        }
    }
    return max1;
    
}
int con(int a,int b,int c){
    if((a+b)<=c || (a+c)<=b || (c+b)<=a){
        return -1;
    }else if (a==b && b==c && c==a)
    {
       return 2;
    }else if (a==b || b==c || c==a )
    {
       return 1;
    }else
    {
        return 0;
    }
}
int main(int argc, char const *argv[])
{
     int menu=0;
    while (1)
    {
    print_menu();
    printf("请输入>>>");
    scanf("%d", &menu);
    getchar();  
    switch(menu)
    {
    case  1:{
    int num,key;        
    printf("请输入两个数:");
    scanf("%d%d", &num, &key);
    max1(num,key);}
    break;
    case 2:
    {
    int max1=max2();
    printf("最大值为%d\n",max1);
    }
    break;
    case 3:
    {
        int x=0,y=0,z=0;
        while (1)
        {   
        printf("请输入三角形的三条边:");
        scanf("%d%d%d",&x,&y,&z);
        int a=con(x,y,z);
        if(a==-1){
            printf("不能构成三角形,请重新输入\n");
        }else if (a==0)
        {
            printf("构成普通三角形\n");
            break;
        }else if (a==1)
        {
            printf("构成等腰三角形\n");
            break;
        }else if (a==2)
        {
            printf("构成等边三角形\n");
            break;
        }
        }
        
    }
    break;
    case 0: goto END;
    default:printf("您输入的功能有误,请重新输入\n");
    }
    }
    END:
    return 0;
    }
 


课外作业:

完成学生管理系统

1> 使用菜单完成

2> 有学生的信息录入功能:输入学生个数,并将学生的姓名、分数录入

3> 查看学生信息:输出所有学生姓名以及对应的分数

4> 求出学习最好的学生信息:求最大值

5> 按姓名将所有学生进行升序排序

6> 按成绩将学生学生进行升序排序

要求每个功能使用函数完成

解析:

方法一:

#include<stdio.h>
#include<string.h>
#define MAX 50
char names[MAX][50];
int scores[MAX];
int count = 0;
void print_menu();                                 //菜单
void enterstu();                                        // 学生信息录入
void findstu();                                          // 查看所有学生信息
void findtopstu();                                  // 寻找学习成绩最好的学生
void sortnamestu();                             // 按姓名将学生进行升序排序
void sortscorestu();                                // 按成绩将学生进行升序排序


int main(int argc, char const *argv[])
{
   //做个菜单
    int menu = 0;
    while(1)
    {
        print_menu();           //调用菜单函数

        printf("请输入>>>");
        scanf("%d", &menu);
        getchar();

        //多分支选择
        switch (menu)
        {
        case 1:
        enterstu();
        break;
        case 2:
        findstu();
        break;
        case 3:
        findtopstu();
        break;
        case 4:
        sortnamestu();
        break;
        case 5:
        sortscorestu();
        break;
        case 0: goto END;
        default:printf("您输入的功能有误,请重新输入\n");
        }
    }
END:
return 0;
}

//菜单
void print_menu()
{
        printf("\t\t======1、学生信息录入======\n");
        printf("\t\t======2、查看学生信息======\n");
        printf("\t\t======3、查看成绩最好的学生(姓名加成绩)======\n");
        printf("\t\t======4、按姓名将所有学生就行升序排序======\n");
        printf("\t\t======5、按成绩将所有学生就行升序排序======\n");
        printf("\t\t======0、退出======\n");
}
// 学生信息录入
void enterstu(){
    printf("请输入学生个数:");
    scanf("%d",&count);//输入学生个数
    for(int i=0;i<count;i++){
    printf("输入第%d个学生姓名:",i+1);
    scanf("%s", names[i]);
    if (strcmp(names[i], "\n") == 0) {  //换行
        return;
    }
    printf("输入学生分数:");
    scanf("%d", &scores[i]);     
    }
}
// 查看所有学生信息
void findstu(){
    for(int i=0;i<count;i++){
        printf("学生姓名:%s成绩:%d\n",names[i],scores[i]);                //输出学生姓名以及对应的成绩
    }
    printf("\n");
}
// 寻找学习成绩最好的学生
void findtopstu(){
    int top = 0;
    for (int i = 0; i < count; i++)
    {
       if(scores[top] < scores[i] ){
           scores[top] = scores[i];                 //寻找成绩最高的学生
       }
    }
    printf("最好成绩学生姓名为:%s,成绩为%d。\n",names[top],scores[top]);                  //输出最好成绩的学生姓名和成绩
}
// 按姓名将学生进行升序排序
void sortnamestu(){
    char temp[MAX];
    int tempx=0;
    for (int i = 1; i < count; i++)
    {
       for (int j = 0; j < count - i; j++)
       {
           if(strcmp(names[j],names[j+1]) > 0){               //进行交换三部曲
               strcpy(temp,names[j]);
               strcpy(names[j],names[j+1]);
               strcpy(names[j+1],temp);
               tempx = scores[j];
               scores[j]=scores[j+1];
               scores[j+1]=tempx;
           }
       }
      
    }
     findstu();
}
// 按成绩将学生进行升序排序
void sortscorestu(){
    char temp[MAX];
    int tempx=0;
    for (int i = 1; i < count; i++)
    {
       for (int j = 0; j < count - i; j++)
       {
           if(scores[j] > scores[j+1]){                                    //进行交换三部曲
               strcpy(temp,names[j]);
               strcpy(names[j],names[j+1]);
               strcpy(names[j+1],temp);
               tempx = scores[j];
               scores[j]=scores[j+1];
               scores[j+1]=tempx;
           }
       }
    }
        findstu();   
}
 

方法二:

#include <stdio.h>
#include <string.h>

#define MAX 5

// 函数声明
void print_menu();
void enterstu(char students[][50],int scores[], int *count);
void findstu(char students[][50],int scores[], int count);
void findtopStu(char students[][50], int scores[], int count, int top);
void sortnamestu(char students[][50], int scores[], int count);
void sortscorestu(char students[][50], int scores[], int count);

int main() {
    char students[MAX][50];
    int scores[MAX];
    int count = 0;
    int top=0;
    int menu=0;

while(1)
    {
        print_menu();           //调用菜单函数

        printf("请输入>>>");
        scanf("%d", &menu);
        getchar();

        //多分支选择
        switch (menu)
        {
        case 1:
        enterstu(students,scores, &count);

        break;
        case 2:
        findstu(students,scores, count);
        break;
        case 3:
        findtopstu(students, scores, count, top);
        break;
        case 4:
        sortnamestu(students, scores, count);
        break;
        case 5:
        sortscorestu(students, scores, count);
        break;
        case 0: goto END;
        default:printf("您输入的功能有误,请重新输入\n");
        }
    }
END:
return 0;
}
//菜单
void print_menu()
{
        printf("\t\t======1、学生信息录入======\n");
        printf("\t\t======2、查看学生信息======\n");
        printf("\t\t======3、查看成绩最好的学生(姓名加成绩)======\n");
        printf("\t\t======4、按姓名将所有学生就行升序排序======\n");
        printf("\t\t======5、按成绩将所有学生就行升序排序======\n");
        printf("\t\t======0、退出======\n");
}
// 学生信息录入
void enterstu(char students[][50],int scores[], int *count) {
    printf("输入学生个数:");
    scanf("%d", count);
    for (int i = 0; i < *count; i++) {
        printf("输入学生 #%d 的姓名:", i + 1);
        scanf("%s", students[i]);
        printf("输入学生 #%d 的分数:", i + 1);
        scanf("%d", &scores[i]);
    }
}

// 查看所有学生信息
void findstu(char students[][50], int scores[],int count) {
    for (int i = 0; i < count; i++) {
        printf("姓名:%s 分数:%d\n", students[i], scores[i]);
    }
}

// 寻找学习最好的学生
void findtopstu(char students[][50], int scores[], int count, int top) {
    for (int i = 0; i < count; i++)
    {
       if(scores[top] < scores[i] ){
           scores[top] = scores[i];                 //寻找成绩最高的学生
       }
    }
    printf("最好成绩学生姓名为:%s,成绩为%d。\n",students[top],scores[top]);                //输出最好成绩的学生姓名和成绩
}

// 按姓名将学生进行升序排序
void sortnamestu(char students[][50], int scores[], int count) {
    char temp[MAX];
    int tempx=0;
   for (int i = 1; i < count; i++)
    {
       for (int j = 0; j < count - i; j++)
       {
           if(strcmp(students[j],students[j+1]) > 0){               //进行交换三部曲
               strcpy(temp,students[j]);
               strcpy(students[j],students[j+1]);
               strcpy(students[j+1],temp);
               tempx = scores[j];
               scores[j]=scores[j+1];
               scores[j+1]=tempx;
           }
       }
      
    }
    printf("按姓名排序后的学生信息:\n");
    findstu(students, scores,count);
}

// 按成绩将学生进行升序排序
void sortscorestu(char students[][50], int scores[], int count) {
    char temp[MAX];
    int tempx=0;
   for (int i = 1; i < count; i++)
    {
       for (int j = 0; j < count - i; j++)
       {
           if(scores[j] > scores[j+1]){               //进行交换三部曲
               strcpy(temp,students[j]);
               strcpy(students[j],students[j+1]);
               strcpy(students[j+1],temp);
               tempx = scores[j];
               scores[j]=scores[j+1];
               scores[j+1]=tempx;
           }
       }
      
    }
    printf("按成绩排序后的学生信息:\n");
    findstu(students, scores,count);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据采集:如何使用八爪鱼采集BOSS直聘职位数据

大家好&#xff0c;我是水哥&#xff01; 今天给大家分享的是数据采集实战&#xff1a;使用「八爪鱼」第三方工具来采集 BOSS 直聘上的数据分析职位数据。 接下来&#xff0c;我们详细看一看。 不重复造轮子 在工作中&#xff0c;我们一定要形成一个认知&#xff0c;能用第…

最新浪子授权系统网站源码 全开源免授权版本

最新浪子授权系统网站源码 全开源免授权版本 此版本没有任何授权我已经去除授权&#xff0c;随意二开无任何加密。 更新日志 1.修复不能下载 2.修复不能更新 3.修复不能删除用户 4.修复不能删除授权 5.增加代理后台管理 6.重写授权读取文件 7.修复已经知道漏洞 源码下…

土壤分析仪:解密土壤之奥秘的科技先锋

在农业生产和生态保护的道路上&#xff0c;土壤的质量与状况一直是我们关注的焦点。土壤分析仪&#xff0c;作为现代科技在农业和环保领域的杰出代表&#xff0c;以其高效、精准的分析能力&#xff0c;为我们揭示了土壤的奥秘&#xff0c;为农业生产提供了科学指导&#xff0c;…

【PTA天梯赛】L1-006 连续因子(20分)

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法刷题 &#x1f43e;或许会很慢&#xff0c;但是不可以停下来&#x1f43e; 文章目录 题目题解题意步骤 总结 题目 题目链接 题解 题意 求解n的最长连续因子 和因子再相乘的积无关&#xff0c;真给绕进去了 步骤 双重循…

阿里云操作系统智能助手OS Copilot实验测评报告

简介&#xff1a;作为一名学生&#xff0c;阿里云操作系统智能助手OS Copilot对学生的帮助主要体现在提高学习效率、简化操作流程和优化系统管理等方面。通过其丰富的功能&#xff0c;从系统信息的快速获取到复杂的系统运维管理&#xff0c;OS Copilot都能为学生提供极大的便利…

硅谷甄选二(登录)

一、登录路由静态组件 src\views\login\index.vue <template><div class"login_container"><!-- Layout 布局 --><el-row><el-col :span"12" :xs"0"></el-col><el-col :span"12" :xs"2…

kali安装vulhub遇到的问题及解决方法(docker及docker镜像源更换)

kali安装vulhub&#xff1a; 提示&#xff1a;项目地址 https://github.com/vulhub/vulhub 项目安装&#xff1a; git clone https://github.com/vulhub/vulhub.git 安装docker 提示&#xff1a;普通用户请使用sudo&#xff1a; 首先安装 https 协议、CA 证书 apt-get in…

针对tcp不出网打——HTTP封装隧道代理(以CFS演示)

目录 上传工具到攻击机 使用说明 生成后门文件 由于电脑短路无法拖动文件&#xff0c;我就wget发送到目标主机tunnel.php文件​ 成功上传​ 可以访问上传的文件 启动代理监听 成功带出 后台私信获取弹药库工具reGeorg 上传工具到攻击机 使用说明 生成后门文件 pyt…

和鲸科技荣耀入选2024 H1 「中国最具价值 AGI 创新机构 TOP 50」

以下文章来源于Founder Park&#xff0c;作者Founder Par 大模型的盛宴&#xff0c;不应该只属于那些无数光环加身的算法天才们。 模型的冰山一角下&#xff0c;是应用层的暗流涌动&#xff0c;这是一个更庞大&#xff0c;也更隐秘的蓝海。但发掘这一切的前提是&#xff0c;所…

【RHCE】NFS 实验

主服务器 下载nfs-utils软件包&#xff1a; 1.如果停⽌该服务&#xff0c;启动并启⽤该服务&#xff1a; systemctl enable - now rpcbind 2.要启动 NFS 服务器&#xff0c;并使其在引导时⾃动启动&#xff1a;systemctl enable - now nfs- server 3.配置防火墙&#xff0c;开…

pd虚拟机去虚拟化是什么意思?pd虚拟机去虚拟化教程 PD虚拟机优化设置

Parallels Desktop for Mac&#xff08;PD虚拟机&#xff09;去虚拟化是指在虚拟机&#xff08;Virtual Machine&#xff0c;简称 VM&#xff09;中禁用或减少虚拟化层的影响&#xff0c;使其表现更接近于物理机。这种操作通常用于提高虚拟机的性能或解决某些软件兼容性问题。具…

ASP.NET Core----基础学习04----Model模型的创建 服务的注入

文章目录 1. 创建Models文件夹&#xff0c;3个文件的内容如下&#xff1a;&#xff08;1&#xff09;模型的创建&#xff08;2&#xff09;服务的注入 1. 创建Models文件夹&#xff0c;3个文件的内容如下&#xff1a; &#xff08;1&#xff09;模型的创建 模型的基础类Student…

每日Attention学习9——Efficient Channel Attention

模块出处 [CVPR 20] [link] [code] ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 模块名称 Efficient Channel Attention (ECA) 模块作用 通道注意力 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional …

【雷达原理】数字波束形成(DBF)

目录 一、数字波束形成1.1 DBF原理1.2 工程应用实现方式1.2.1 预先存储权矢量1.2.2 利用DFT/FFT实现DBF 二、DBF应用2.1 通道间相干积累2.2 测量目标角度 三、MATLAB代码 一、数字波束形成 数字波束形成&#xff08;Digital Beam Forming&#xff0c;DBF) 技术&#xff0c;是针…

PDF 分割拆分 API 数据接口

PDF 分割拆分 API 数据接口 文件处理&#xff0c;PDF 高效的 PDF 分割工具&#xff0c;高效处理&#xff0c;可永久存储。 1. 产品功能 高效处理大文件&#xff1b;支持多语言字符识别&#xff1b;支持 formdata 格式 PDF 文件流传参&#xff1b;支持设置每个 PDF 文件的页数…

电脑压缩视频怎么压缩,电脑压缩视频大小

随着科技的进步&#xff0c;我们越来越喜欢用视频记录生活中的点点滴滴。但随之而来的问题就是&#xff0c;视频文件体积庞大&#xff0c;给我们的存储和分享带来了不小的困扰。那么&#xff0c;有没有什么方法能够轻松解决这个问题呢&#xff1f;答案当然是肯定的&#xff01;…

如何保证Redis缓存和数据库的数据一致性

前言 如果项目业务处于起步阶段&#xff0c;流量非常小&#xff0c;那无论是读请求还是写请求&#xff0c;直接操作数据库即可&#xff0c;这时架构模型是这样的&#xff1a; 但随着业务量的增长&#xff0c;项目业务请求量越来越大&#xff0c;这时如果每次都从数据库中读数据…

【Redis】简单了解Redis中常用的命令与数据结构

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Redis的特点和适用场景三、Redis的数据类型和使用3.1字符串&#xff08;String&…

LabVIEW电容器充放电监测系统

概述 为了对车用超级电容器的特性进行研究&#xff0c;确保其在工作时稳定可靠并有效发挥性能优势&#xff0c;设计了一套车用超级电容器充放电监测系统。该系统通过利用传感器、USB数据采集卡、可调直流稳压电源、电子负载以及信号调理电路&#xff0c;完成对各信号的采集和超…

springboot中通过jwt令牌校验以及前端token请求头进行登录拦截实战

前言 大家从b站大学学习的项目侧重点好像都在基础功能的实现上&#xff0c;反而一个项目最根本的登录拦截请求接口都不会写&#xff0c;怎么拦截&#xff1f;为什么拦截&#xff1f;只知道用户登录时我后端会返回一个token&#xff0c;这个token是怎么生成的&#xff0c;我把它…