异常情况:程序可以运行,添加学生信息也没问题,是否要继续输入时输入“y”也没问题但“n”后就出现这个提示
#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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#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");
}
运行结果: