输入“n”后就出现问题

异常情况:程序可以运行,添加学生信息也没问题,是否要继续输入时输入“y”也没问题但“n”后就出现这个提示

img

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
#include<string.h>
struct Car {   //每个车辆对应一个结构体 
    char ID[20];//车牌号 
    char Name[10];//车主姓名 
    char Driverid[20];//车主身份证号
    float time1;//车辆进入时间
    float time2;//车辆驶出时间
    float time3; //车辆总停留时间

}car[1000];

int num = 0; //计数器,对应车辆数

void Copy(struct Car* arr, int i, int j)
{
    strcpy(arr[i].ID, arr[j].ID);
    strcpy(arr[i].Name, arr[j].Name);
    strcpy(arr[i].Driverid, arr[j].Driverid);
    arr[i].time1 = arr[j].time1;
    arr[i].time2 = arr[j].time2;
    arr[i].time3 = arr[j].time3;
}

int Car_SearchByName(char name[])//通过车主来检索学生
{
    int i;
    for (i = 0; i < num; i++)
    {
        if (strcmp(car[i].Name, name) == 0)  //通过strcmp函数来对比车主姓名,找到返回在数组的位置 
        {
            return i;
        }
    }
    return -1;    //未找到返回 -1 
}

int  Car_SearchByIndex(char id[])//通过车牌号来检索车辆信息
{
    int i;
    for (i = 0; i < num; i++)
    {
        if (strcmp(car[i].ID, id) == 0)
        {
            return i;
        }
    }
    return -1;
}
void Car_DisplaySingle(int index)  //输出表头,显示某个车辆信息
{
    printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "车牌号", "车主姓名", "车主身份证号", "车辆进入时间", "车辆驶出时间", "车辆总停留时间");
    printf("-------------------------------------------------------------\n");
    printf("%10s%10s%10s%8.2f%8.2f%8.2f%10.2f%10.2f\n", car[index].ID, car[index].Name, car[index].Driverid, car[index].time1, car[index].time2, car[index].time3);
}

void inputt()   //利用循环录入车辆信息
{
    while (1)
    {
        printf("请输入车牌号:");     //依次输入各项数据
        scanf("%s", &car[num].ID);
        getchar();                 //接收缓冲区中的回车符

        printf("请输入车主姓名;");
        scanf("%s", &car[num].Name);
        getchar();
        printf("请输入车主身份证号:");
        scanf("%s", &car[num].Driverid);
        getchar();
        printf("请输入车辆进入时间:");
        scanf("%f", &car[num].time1);
        getchar();
        printf("请输入车辆驶出时间:");
        scanf("%f", &car[num].time2);
        getchar();

        car[num].time3 = car[num].time2 - car[num].time1;    //输完数据后自动计算总停留时间 

        if (Car_SearchByIndex(car[num].ID) == -1)  //判断输入的车牌号是否已经存在,不存在计数器下移,否则输入无效
        {
            num++;  //移向下一个位置,第1个车辆num=0,先输入然后num+1
        }
        else
        {
            printf("车牌号重复,输入数据无效 !!!\n");
        }

        printf("是否继续?(y/n)");
        if (getchar() == 'n')
        {
            break;
        }
    }
}

void modify()//修改车辆
{
    while (1)
    {
        char id[20];
        int index;
        printf("请输入要修改的车辆的车牌号:");
        scanf("%s", &id);
        getchar();     //接收缓冲区中的回车符
        index = Car_SearchByIndex(id);  //调用搜查id函数,根据其返回值确定位置 

        if (index == -1)
        {
            printf("车辆不存在!\n");
        }
        else
        {
            printf("你要修改的车辆信息为:\n");
            Car_DisplaySingle(index);
            printf("请输入新值\n");
            printf("请输入车牌号;");
            scanf("%s", &car[index].ID);
            getchar();
            printf("请输入车主姓名;");
            scanf("%s", &car[index].Name);
            getchar();
            printf("请输入车主身份证号:");
            scanf("%s", &car[index].Driverid);
            getchar();
            printf("请输入车辆驶入时间:");
            scanf("%f", &car[index].time1);
            getchar();
            printf("请输入车辆驶出时间:");
            scanf("%f", &car[index].time2);
            getchar();

            car[num].time3 = car[num].time2 - car[num].time1;    //输完数据后自动计算总停留时间 
        }

        printf("是否继续?(y/n)");
        if (getchar() == 'n')
        {
            break;
        }

    }
}

void deletee()//删除车辆信息
{
    int i;
    while (1)
    {
        char id[20];
        int index;
        printf("请输入要删除的车辆的车牌号:");
        scanf("%s", &id);
        getchar();
        index = Car_SearchByIndex(id);   //调用搜查id函数,根据其返回值确定位置 

        if (index == -1)
        {
            printf("车辆不存在!\n");
        }
        else
        {
            printf("你要删除的车辆信息为:\n");
            Car_DisplaySingle(index);
            printf("是否真的要删除?(y/n)");
            if (getchar() == 'y')
            {
                for (i = index; i < num - 1; i++)
                {
                    Copy(car, i, i + 1);
                    car[i] = car[i + 1];
                }
                num--;
            }
            getchar();
        }

        printf("是否继续?(y/n)");
        if (getchar() == 'n')
        {
            break;
        }
    }
}

void display()//打印已录入的车辆信息
{
    int a;
    printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "车牌号", "车主姓名", "车主身份证号", "车辆驶入时间", "车辆驶出时间", "车辆总停留时间");
    printf("-------------------------------------------------------------\n");
    for (a = 0; a < num; a++)
    {
        printf("%10s%10s%10s%8.2f%8.2f%8.2f%10.2f%10.2f\n", car[a].ID, car[a].Name,
            car[a].Driverid, car[a].time1, car[a].time2, car[a].time3);
    }
}

void insert()//指定位置插入车辆信息
{
    int a, b, c;
    printf("请输入你要插入的位置");
    scanf("%d", &a);
    if (a > num) {
        printf("输入的位置有误,请重新输入,当前共%d条数据\n", num);
        scanf("%d", &a);
    }

    for (b = num - 1; b >= a - 1; b--)
    {

        Copy(car, b + 1, b);
    }
    num++;  //计数器+1
    printf("请输入车牌号:");   //在第a个位置(数组元素下标为a-1)插入车辆信息
    scanf("%s", &car[a - 1].ID);
    getchar();
    printf("请输入车主姓名:");
    scanf("%s", &car[a - 1].Name);
    getchar();
    printf("请输入车辆驶入时间:");
    scanf("%f", &car[a - 1].time1);
    getchar();
    printf("请输入车辆驶出时间:");
    scanf("%f", &car[a - 1].time2);
    getchar();

    car[a - 1].time3 = car[a - 1].time2 - car[a - 1].time1;
}

void search()//查询车辆信息
{
    while (1)
    {
        char name[20];
        int index;
        printf("请输入要查询的车辆的车主姓名:");
        scanf("%s", &name);
        getchar();
        index = Car_SearchByName(name);   //调用搜查name函数,根据其返回值确定位置 
        if (index == -1)
        {
            printf("车辆不存在!\n");
        }
        else
        {
            printf("你要查询的车辆信息为:\n");
            Car_DisplaySingle(index);
        }



        printf("是否继续?(y/n)");
        if (getchar() == 'n')
        {
            break;
        }
    }
}

void Save()
{
    FILE* fp = fopen("car.txt", "w+");
    fprintf(fp, "%d\n", num);
    for (int i = 0; i < num; i++)
    {
        fprintf(fp, "%s %s %s %f %f %f %f %f\n", car[i].ID, car[i].Name, car[i].time1, car[i].time2, car[i].time3);
    }
    fclose(fp);
}

void Load()
{
    FILE* fp = fopen("car.txt", "r");
    fscanf(fp, "%d", &num);
    for (int i = 0; i < num; i++)
    {
        fscanf(fp, "%s %s %s %f %f %f %f %f\n", car[i].ID, car[i].Name, &car[i].time1, &car[i].time2, &car[i].time3);
    }
    fclose(fp);
}

/*主程序*/
int main() {
    int i;
    while (1) {
        Load();
        printf("%13s%3s%11s%8s\n", "A22医疗器械工程技术1班", "吴嘉莹", "A2226210107", "地下车库管理系统");
        printf("\t\t\t\t\t-------- 地下车库管理系统-------\n\n\n\n");     //菜单 
        printf("\t\t\t\t\t1. 增加车辆记录\n\n");
        printf("\t\t\t\t\t2. 修改车辆记录\n\n");
        printf("\t\t\t\t\t3. 删除车辆记录\n\n");
        printf("\t\t\t\t\t4. 插入车辆记录\n\n");
        printf("\t\t\t\t\t5. 显示所有记录\n\n");
        printf("\t\t\t\t\t6. 查询车辆记录\n\n");
        printf("\t\t\t\t\t0. 退出\n\n\n");
        printf("请选择(0-6):");
        scanf("%d", &i);
        switch (i) {
        case 1:inputt(); break;
        case 2:modify(); break;
        case 3:deletee(); break;
        case 4:insert(); break;
        case 5:display(); break;
        case 6:search(); break;
        case 0:exit(0);   // exit(0) 正常退出程序,exit(1)表示异常退出程序
        default:;
        }
        Save();
    }
    return 0;
}

修改这里

void search()//查询车辆信息
{
    while (1) 
    {
        // ...
        char c;
        scanf("%c", &c);  // 读取是否继续
        if (c == 'n')  
        {
            break;  
        }
        // ...
    }
}

代码问题有点多,整体修改完善如下,改动处见注释,供参考:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
#include<string.h>
struct Car {   //每个车辆对应一个结构体
    char ID[20];//车牌号
    char Name[10];//车主姓名
    char Driverid[20];//车主身份证号
    float time1;//车辆进入时间
    float time2;//车辆驶出时间
    float time3; //车辆总停留时间

}car[1000];

int num = 0; //计数器,对应车辆数

//void Copy(struct Car* arr, int i, int j)  修改 不需此函数
//{
//    strcpy(arr[i].ID, arr[j].ID);
//    strcpy(arr[i].Name, arr[j].Name);
//    strcpy(arr[i].Driverid, arr[j].Driverid);
//    arr[i].time1 = arr[j].time1;
//    arr[i].time2 = arr[j].time2;
//    arr[i].time3 = arr[j].time3;
//}
 
int Car_SearchByName(char name[])//通过车主来检索学生
{
    int i;
    for (i = 0; i < num; i++)
    {
        if (strcmp(car[i].Name, name) == 0)  //通过strcmp函数来对比车主姓名,找到返回在数组的位置 
        {
            return i;
        }
    }
    return -1;    //未找到返回 -1 
}

int  Car_SearchByIndex(char id[])//通过车牌号来检索车辆信息
{
    int i;
    for (i = 0; i < num; i++)
    {
        if (strcmp(car[i].ID, id) == 0)
        {
            return i;
        }
    }
    return -1;
}
void Car_DisplaySingle(int index)  //输出表头,显示某个车辆信息
{
    printf("%20s %10s %20s %15s %15s %15s\n", "车牌号", "车主姓名", "车主身份证号", "车辆驶入时间", "车辆驶出时间", "车辆总停留时间"); //修改
    //printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "车牌号", "车主姓名", "车主身份证号", "车辆进入时间", "车辆驶出时间", "车辆总停留时间");
    printf("-------------------------------------------------------------\n");
    printf("%20s %10s %20s %15.2f %15.2f %15.2f\n", car[index].ID, car[index].Name, car[index].Driverid,//修改
                                                 car[index].time1, car[index].time2, car[index].time3);   //修改
    //printf("%10s%10s%10s%8.2f%8.2f%8.2f%10.2f%10.2f\n", car[index].ID, car[index].Name, car[index].Driverid,   修改
    //                                                     car[index].time1, car[index].time2, car[index].time3);修改
}
 
void inputt()   //利用循环录入车辆信息
{
    while (1)
    {
        printf("请输入车牌号:");//依次输入各项数据
        scanf("%s", car[num].ID);    // 修改
        //scanf("%s", &car[num].ID); // 修改
        getchar();//接收缓冲区中的回车符

        printf("请输入车主姓名;");
        scanf("%s", car[num].Name);//scanf("%s", &car[num].Name); 修改
        getchar();
        printf("请输入车主身份证号:");
        scanf("%s", car[num].Driverid);//scanf("%s", &car[num].Driverid); 修改
        getchar();
        printf("请输入车辆进入时间:");
        scanf("%f", &car[num].time1);
        getchar();
        printf("请输入车辆驶出时间:");
        scanf("%f", &car[num].time2);
        getchar();
 
        car[num].time3 = car[num].time2 - car[num].time1; //输完数据后自动计算总停留时间
 
        if (Car_SearchByIndex(car[num].ID) == -1)  //判断输入的车牌号是否已经存在,不存在计数器下移,否则输入无效
        {
            num++;  //移向下一个位置,第1个车辆num=0,先输入然后num+1
        }
        else
        {
            printf("车牌号重复,输入数据无效 !!!\n");
        }

        printf("是否继续?(y/n)");
        if ((getchar()) == 'n')// if (getchar() == 'n') 修改
        {
            break;
        }
    }
}

void modify()//修改车辆
{
    while (1)
    {
        char id[20];
        int index;
        printf("请输入要修改的车辆的车牌号:");
        scanf("%s", id);   //scanf("%s", &id); 修改
        getchar();     //接收缓冲区中的回车符
        index = Car_SearchByIndex(id);  //调用搜查id函数,根据其返回值确定位置 
 
        if (index == -1)
        {
            printf("车辆不存在!\n");
        }
        else
        {
            printf("你要修改的车辆信息为:\n");
            Car_DisplaySingle(index);
            printf("请输入新值\n");
            printf("请输入车牌号;");
            scanf("%s", car[index].ID);//scanf("%s", &car[index].ID); 修改
            getchar();
            printf("请输入车主姓名;");
            scanf("%s", car[index].Name);//scanf("%s", &car[index].Name); 修改
            getchar();
            printf("请输入车主身份证号:");
            scanf("%s", car[index].Driverid);//scanf("%s", &car[index].Driverid); 修改
            getchar();
            printf("请输入车辆驶入时间:");
            scanf("%f", &car[index].time1);
            getchar();
            printf("请输入车辆驶出时间:");
            scanf("%f", &car[index].time2);
            getchar();
            car[index].time3 = car[index].time2 - car[index].time1; //修改
            //car[num].time3 = car[num].time2 - car[num].time1;//输完数据后自动计算总停留时间
        }
 
        printf("是否继续?(y/n)");
        if ((getchar()) == 'n')  //if (getchar() == 'n') 修改
        {
            break;
        }
    }
}

void deletee()//删除车辆信息
{
    int i;
    while (1)
    {
        char id[20];
        int index;
        printf("请输入要删除的车辆的车牌号:");
        scanf("%s", id);   //scanf("%s", &id); 修改
        getchar();
        index = Car_SearchByIndex(id);   //调用搜查id函数,根据其返回值确定位置

        if (index == -1)
        {
            printf("车辆不存在!\n");
        }
        else
        {
            printf("你要删除的车辆信息为:\n");
            Car_DisplaySingle(index);
            printf("是否真的要删除?(y/n)");
            if ((getchar()) == 'y')   //if (getchar() == 'y') 修改
            {
                for (i = index; i < num - 1; i++)
                {
                     //Copy(car, i, i + 1); 修改
                    car[i] = car[i + 1];
                }
                num--;
            }
            getchar();
        }

        printf("是否继续?(y/n)");
        if ((getchar()) == 'n') //if (getchar() == 'n') 修改
        {
            break;
        }
    }
}

void display()//打印已录入的车辆信息
{
    int a;
    printf("%20s %10s %20s %15s %15s %15s\n", "车牌号", "车主姓名", "车主身份证号", "车辆驶入时间", "车辆驶出时间", "车辆总停留时间"); //修改
    //printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "车牌号", "车主姓名", "车主身份证号", "车辆驶入时间", "车辆驶出时间", "车辆总停留时间");
    printf("-------------------------------------------------------------\n");
    for (a = 0; a < num; a++)
    {
        printf("%20s %10s %20s %15.2f %15.2f %15.2f\n", car[a].ID, car[a].Name,       //修改
                         car[a].Driverid, car[a].time1, car[a].time2, car[a].time3);
        //printf("%10s%10s%10s%8.2f%8.2f%8.2f%10.2f%10.2f\n", car[a].ID, car[a].Name, //修改
    }
}
 
void insert()//指定位置插入车辆信息
{
    int a, b, c;
    do {                                                    // 修改
        printf("请输入你要插入的位置,当前共%d条数据\n", num);
        scanf("%d", &a);                                    // 修改
    } while (a < 1 || a > num);

    //if (a > num) {                                    修改
    //    printf("输入的位置有误,请重新输入,当前共%d条数据\n", num); 修改
    //    scanf("%d", &a);                                            修改
    //}                                                               修改
 
    for (b = num; b > a - 1; b--) //for (b = num - 1; b >= a - 1; b--)修改
    {
        car[b] = car[b-1];
        //Copy(car, b + 1, b); 修改
    }
    num++;  //计数器+1

    do {                    // 修改
        printf("请输入车牌号:");   //在第a个位置(数组元素下标为a-1)插入车辆信息
        scanf("%s", car[a - 1].ID); //scanf("%s", &car[a - 1].ID);  修改
        getchar();
    } while (Car_SearchByIndex(car[a-1].ID) != -1);              // 修改

    printf("请输入车主姓名:");
    scanf("%s", car[a - 1].Name); //scanf("%s", &car[a - 1].Name); 修改
    getchar();
    printf("请输入车辆驶入时间:");
    scanf("%f", &car[a - 1].time1);
    getchar();
    printf("请输入车辆驶出时间:");
    scanf("%f", &car[a - 1].time2);
    getchar();

    car[a - 1].time3 = car[a - 1].time2 - car[a - 1].time1;
}
 
void search()//查询车辆信息
{
    while (1)
    {
        char name[20];
        int index;
        printf("请输入要查询的车辆的车主姓名:");
        scanf("%s", name);   //scanf("%s", &name); 修改
        getchar();
        index = Car_SearchByName(name);   //调用搜查name函数,根据其返回值确定位置 
        if (index == -1)
        {
            printf("车辆不存在!\n");
        }
        else
        {
            printf("你要查询的车辆信息为:\n");
            Car_DisplaySingle(index);
        }

        printf("是否继续?(y/n)");
        if ((getchar()) == 'n') //if (getchar() == 'n') 修改
        {
            break;
        }
    }
}
 
void Save()
{
    FILE* fp = fopen("car.txt", "w+");
    fprintf(fp, "%d\n", num);
    for (int i = 0; i < num; i++)
    {
        fprintf(fp, "%s %s %s %f %f %f\n", car[i].ID, car[i].Name, car[i].Driverid,  // 修改
                                          car[i].time1, car[i].time2, car[i].time3); // 修改
        //fprintf(fp, "%s %s %s %f %f %f %f %f\n", car[i].ID, car[i].Name, car[i].time1, car[i].time2, car[i].time3);
    }
    fclose(fp);
}
 
void Load()
{
    FILE* fp = fopen("car.txt", "r");
    if (fp == NULL)                   // 修改
        return;                       // 修改
    fscanf(fp, "%d", &num);
    for (int i = 0; i < num; i++)
    {
        fscanf(fp, "%s %s %s %f %f %f\n", car[i].ID, car[i].Name, car[i].Driverid,
                                      &car[i].time1, &car[i].time2, &car[i].time3);
        //fscanf(fp, "%s %s %s %f %f %f %f %f\n", car[i].ID, car[i].Name, car[i].Driverid, 修改
        //                                  &car[i].time1, &car[i].time2, &car[i].time3);  修改
    }
    fclose(fp);
}
 
/*主程序*/
int main() {
    int i;
    Load();   //  修改
    while (1) {
        //Load(); 修改
        printf("%13s%3s%11s%8s\n", "A22医疗器械工程技术1班", "吴嘉莹", "A2226210107", "地下车库管理系统");
        printf("\t\t\t\t\t-------- 地下车库管理系统-------\n\n\n\n");     //菜单 
        printf("\t\t\t\t\t1. 增加车辆记录\n\n");
        printf("\t\t\t\t\t2. 修改车辆记录\n\n");
        printf("\t\t\t\t\t3. 删除车辆记录\n\n");
        printf("\t\t\t\t\t4. 插入车辆记录\n\n");
        printf("\t\t\t\t\t5. 显示所有记录\n\n");
        printf("\t\t\t\t\t6. 查询车辆记录\n\n");
        printf("\t\t\t\t\t0. 退出\n\n\n");
        printf("请选择(0-6):");
        scanf("%d", &i);
        switch (i) {
        case 1:inputt(); break;
        case 2:modify(); break;
        case 3:deletee();break;
        case 4:insert(); break;
        case 5:display();break;
        case 6:search(); break;
        case 0:Save();   exit(0);// exit(0) 正常退出程序,exit(1)表示异常退出程序  修改
        default:break;
        }
        //Save();  修改
    }
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7602935
  • 你也可以参考下这篇文章:函数习题:用函数实现判断一个整数是否能被n整除
  • 除此之外, 这篇博客: 去重排序(输入n个整数,排序后输出)中的 解题方法1:先排序,在去重 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include<stdio.h>
    #include <math.h>
    
    #define N 20
    
    void InPutArr(int array[], int n);
    void sort(int array[], int n);
    void PrintArr (int array[], int n);
    
    int main()
    {
        int n,a[N] = {0};
    
        printf("输入整数个数:\n");
        scanf("%d",&n);
    //    输入数组a的n个元素
        InPutArr(a,n);
    
    //    将数组array的n个元素升序排序
        sort(a,n);
    
        printf("排序后数组为:\n");
    //    去重并输出数组的n个元素
        PrintArr(a,n);
    
        return 0;
    }
    
    //读入n个整数存入数组array
    void InPutArr(int array[], int n)
    {
        int i;
        printf("输入%d个整数:\n",n);
    
        for(i = 0; i <n; i++)
        {
            scanf("%d",&array[i]);
        }
    }
    
    
    //将数组array中的元素进行升序排序
    void sort(int array[] , int n)
    {
        int i,j,t;
    
        for(i = 0; i < n-1; i++)
        {
            for (j = i+1; j < n; j++ )
            {
                if(array[i] > array[j])
                {
                    t = array[i]; array[i] = array[j]; array[j] = t;
                }
            }
        }
    }
    
    //输出数组array的n个元素
    void PrintArr(int array[], int n)
    {
        int i;
    
        for(i = 0;i < n; i++)
        {
            if(i == 0)
                printf("%d",array[i]);
            else
                if(array[i] != array[i-1])
                    printf("% d",array[i]);/**<去重处理( 若a[i]不同于前一个相邻元素,则输出a[i] )*/
        }
        printf("\n");
    }
    

    运行结果:



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^