#include <stdio.h>
#include <string.h>
#include<stdlib.h>
struct Student
{
int num;
char name[20];
int age;
char sex;
struct birth
{
int year;
int month;
int day;
} birthday;
char address[50];
char tel[12];
char Email[20];
} stu,stu1;
void insert(struct Student *stu,int N)
{
int i;
printf("请根据提示按照格式录入信息!\n");
printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n");
for(i=0; i<N; i++)
scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,&stu[i].sex,&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
/*FILE *fp;
fp=fopen("ccccc.txt","wt+");
fwrite(stu,sizeof(struct Student),N,fp);
fflush(stdin);
fclose(fp);*/
system("pause");
}
void disp(struct Student *stu,int N)
{
/*FILE *fp;
fp=fopen("ccccc.txt","wt+");
fread(stu1,sizeof(struct Student),N,fp);*/
int i;
for(i=0; i<N; i++)
printf("%d %s %d %s %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
//fclose(fp);
system("pause");
}
void find(struct Student *stu,int N)
{
int i,n,xh,flag=0;
char name[20];
printf("请输入想要查询的方式:1 2");
scanf("%d",&n);
if(n==1)
{
printf("请输入要查找的学号:");
scanf("%d",&xh);
for(i=0; i<N; i++)
if(xh==stu[i].num)
{
flag = 1;
printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n");
printf("--------------------------------------------------------------------\n");
printf("%d %s %d %s %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
}
if (0 == flag)
printf("该学号不存在!\n");
}
else if(n==2)
{
printf("请输入要查找的姓名:");
scanf("%s",name);
for(i=0; i<N; i++)
while(strcmp(name,stu[i].name)==0)
{
flag = 1;
printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n");
printf("--------------------------------------------------------------------\n");
printf("%d %s %d %s %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
}
if (0 == flag)
printf("该姓名不存在!\n");
}
else
printf("NULL!");
system("pause");
}
void modify( struct Student *stu,int N)
{
int i, choice, num=-1,xh,flag=0;
int year,month,day;
char sex, name[20],tel[20], add[20],mail[20];
printf("请输入要要修改的学生的学号:\n");
scanf("%d", &xh);
for (i=0;i<N;i++)
{
num=i;
if (stu[i].num==xh)
{
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改性别\n");
printf("4.修改出生年份\n");
printf("5.修改出生月份\n");
printf("6.修改出生日\n");
printf("7.修改地址\n");
printf("8.修改电话号码\n");
printf("9.修改邮箱\n");
printf("10.修改完成!\n");
while (flag==0)
{
printf("请选择:");
scanf("%d", &choice);
switch (choice)
{
case 1:
printf("请输入新的姓名:\n");
scanf("%s", name);
strcpy(stu[num].name, name);
break;
case 2:
printf("请输入新的年龄:\n");
scanf("%d", stu[num].age);
break;
case 3:
printf("请输入新的性别:\n");
scanf("%s", &sex);
stu[i].sex = sex;
break;
case 4:
printf("请输入新的出生年份:\n");
scanf("%d", &year);
stu[num].birthday.year = year;
break;
case 5:
printf("请输入新的出生月份:\n");
scanf("%d", &month);
stu[num].birthday.month = month;
break;
case 6:
printf("请输入新的出生日:\n");
scanf("%d", &day);
stu[num].birthday.day = day;
break;
case 7:
printf("请输入新的地址:\n");
scanf("%s", &add);
strcpy(stu[num].address, add);
break;
case 8:
printf("请输入新的电话号码:\n");
scanf("%s", &tel);
strcpy(stu[num].tel, tel);
break;
case 9:
printf("请输入新的邮箱:\n");
scanf("%s", &mail);
strcpy(stu[num].Email, mail);
break;
case 10:
flag=1;
default:
printf("请在1-9之间选择\n");
}
}
printf("修改完毕!请及时保存!\n");
}
else
{
printf("没有该学生学号!!!");
}
}
system("pause");
}
void delete(struct Student *stu,int *N)
{
//FILE *fp1;
//fp1=fopen("bbbbb.txt","wt+");
int i, j,xh,flag = 0;
char s1[20];
printf("请输入要删除学生的学号:\n");
scanf("%d", &xh);
for (i = 0; i <*N; i++)
{
if (stu[i].num==xh)
{
flag = 1;
for (j = i; j <(*N)-1; j++)
{
stu[j] = stu[j + 1];
}
}
}
if (flag==0)
{
printf("该学号不存在!\n");
}
if (flag==1)
{
printf("成功将该学生信息删除,并保留在别的文件中!\n");
(*N)--;
}
system("pause");
}
void add(struct Student *stu,int *N)
{
int i,m,j,flag,k;
k=(*N);
printf("请输入待增加的学生数:\n");
scanf("%d", &m);
stu=(struct Student *)malloc(sizeof(struct Student)*((*N)+m));
if (m>0){
do
{
flag = 1;
while (flag)
{
flag = 0;
printf("请输入第%d位学生的学号:\n", k + 1);
scanf("%d",&stu[k].num);
for (j = 0; j < k; j++){
if (stu[k].num==stu[j].num)
{
printf("该学号已存在\n");
flag = 1;
break;
}
}
}
printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n");
for(i=0; i<m; i++)
scanf("%d%s%d%s%d%d%d%s%s%s",&stu[(*N)+i].num,stu[(*N)+i].name,&stu[(*N)+i].age,&stu[(*N)+i].sex,&stu[(*N)+i].birthday.year,&stu[(*N)+i].birthday.month,&stu[(*N)+i].birthday.day,stu[(*N)+i].address,stu[(*N)+i].tel,stu[(*N)+i].Email);
if (0 == flag)
{
k++;
}
} while (k<(*N)+m);
}
(*N)=(*N)+m;
system("pause");
}
int main()
{
int num,flag=1,N;
printf("请输入要录入的学生信息个数\n");
scanf("%d",&N);
struct Student *stu;
stu=(struct Student *)malloc(sizeof(struct Student)*N);
struct Student *stu1;
stu1=(struct Student *)malloc(sizeof(struct Student)*N);
while (flag!=0)
{
printf(" *************************************************\n\n");
printf(" * 学生信息管理系统 *\n \n");
printf(" *************************************************\n\n");
printf("********************系统功能菜单*********************\n");
printf(" ---------------------- ---------------------- \n");
printf(" ********************************************* \n");
printf(" 1.录入学生信息 2.浏览当前信息 \n");
printf(" ********************************************* \n");
printf(" * 3.查询学生信息 4.修改学生信息 \n");
printf(" ********************************************* \n");
printf(" * 5.删除学生信息 6 增添学生信息 \n");
printf(" ********************** ********************** \n");
printf(" ---------------------- ---------------------- \n");
printf("请选择菜单编号:");
scanf("%d", &num);
switch (num)
{
case 1:
insert(stu,N);
break;
case 2:
disp(stu,N);
break;
case 3:
find(stu,N);
break;
case 4:
modify(stu, N);
break;
case 5:
delete(stu, &N);
break;
case 6:
add(stu,&N);
break;
case 7:
flag=0;
printf("即将退出程序!\n");
default:
printf("NULL\n");
}
}
return 0;
}
有无大佬看看,新手,代码运行很有问题,球球了
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注 楼上的专家,并不是出现编译问题,而是运行问题,在录入学生的函数中
26行
scanf("%d%s%d%s%d%d%d%s%s%s",&stu[i].num,stu[i].name,&stu[i].age,&stu[i].sex,&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
这句话是有问题的,需要空格加以区分,(此处有些数据输入,是有格式限制的,例如性别,最好加以提示,后期需要优化)
scanf("%d %s %d %s %d %d %d %s %s %s",&stu[i].num,stu[i].name,&stu[i].age,&stu[i].sex,&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
输入就没有问题了,然后查询的话,会报段错误,因为其中性别,是一个字符,所以不能用%s,只能用%c
14行,修改为,第四个参数为%c接收。
printf("%d %s %d %c %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email);
类似的还有几处,包括还有一些输入字符串的时候,不需要取地址的错误,所有这些在编译的时候会出现报警,一定要注意,一些警告,也是错误,以下是修改过明显错误的代码,详细没有再调试,可以再看看还有没有其他问题
#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> struct Student { int num; char name[20]; int age; char sex; struct birth { int year; int month; int day; } birthday; char address[50]; char tel[12]; char Email[20]; } stu,stu1; void insert(struct Student *stu,int N) { int i; printf("请根据提示按照格式录入信息!\n"); printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n"); for(i=0; i<N; i++) scanf("%d %s %d %c %d %d %d %s %s %s",&stu[i].num,stu[i].name,&stu[i].age,&stu[i].sex,&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email); /*{ FILE *fp; fp=fopen("ccccc.txt","wt+"); fwrite(stu,sizeof(struct Student),N,fp); fflush(stdin); fclose(fp); }*/ //system("pause"); } void disp(struct Student *stu,int N) { /*FILE *fp; fp=fopen("ccccc.txt","wt+"); fread(stu1,sizeof(struct Student),N,fp);*/ int i; for(i=0; i<N; i++) printf("%d %s %d %c %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email); //fclose(fp); system("pause"); } void find(struct Student *stu,int N) { int i,n,xh,flag=0; char name[20]; printf("请输入想要查询的方式:1 2"); scanf("%d",&n); if(n==1) { printf("请输入要查找的学号:"); scanf("%d",&xh); for(i=0; i<N; i++) if(xh==stu[i].num) { flag = 1; printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n"); printf("--------------------------------------------------------------------\n"); printf("%d %s %d %c %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email); } if (0 == flag) printf("该学号不存在!\n"); } else if(n==2) { printf("请输入要查找的姓名:"); scanf("%s",name); for(i=0; i<N; i++) while(strcmp(name,stu[i].name)==0) { flag = 1; printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n"); printf("--------------------------------------------------------------------\n"); printf("%d %s %d %c %d %d %d %s %s %s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day,stu[i].address,stu[i].tel,stu[i].Email); } if (0 == flag) printf("该姓名不存在!\n"); } else printf("NULL!"); system("pause"); } void modify( struct Student *stu,int N) { int i, choice, num=-1,xh,flag=0; int year,month,day; char sex, name[20],tel[20], add[20],mail[20]; printf("请输入要要修改的学生的学号:\n"); scanf("%d", &xh); for (i=0;i<N;i++) { num=i; if (stu[i].num==xh) { printf("------------------\n"); printf("1.修改姓名\n"); printf("2.修改年龄\n"); printf("3.修改性别\n"); printf("4.修改出生年份\n"); printf("5.修改出生月份\n"); printf("6.修改出生日\n"); printf("7.修改地址\n"); printf("8.修改电话号码\n"); printf("9.修改邮箱\n"); printf("10.修改完成!\n"); while (flag==0) { printf("请选择:"); scanf("%d", &choice); switch (choice) { case 1: printf("请输入新的姓名:\n"); scanf("%s", name); strcpy(stu[num].name, name); break; case 2: printf("请输入新的年龄:\n"); scanf("%d",&stu[num].age); break; case 3: printf("请输入新的性别:\n"); scanf("%c", &sex); stu[i].sex = sex; break; case 4: printf("请输入新的出生年份:\n"); scanf("%d", &year); stu[num].birthday.year = year; break; case 5: printf("请输入新的出生月份:\n"); scanf("%d", &month); stu[num].birthday.month = month; break; case 6: printf("请输入新的出生日:\n"); scanf("%d", &day); stu[num].birthday.day = day; break; case 7: printf("请输入新的地址:\n"); scanf("%s", add); strcpy(stu[num].address, add); break; case 8: printf("请输入新的电话号码:\n"); scanf("%s", tel); strcpy(stu[num].tel, tel); break; case 9: printf("请输入新的邮箱:\n"); scanf("%s", mail); strcpy(stu[num].Email, mail); break; case 10: flag=1; default: printf("请在1-9之间选择\n"); } } printf("修改完毕!请及时保存!\n"); } else { printf("没有该学生学号!!!"); } } system("pause"); } void delete(struct Student *stu,int *N) { //FILE *fp1; //fp1=fopen("bbbbb.txt","wt+"); int i, j,xh,flag = 0; //char s1[20]; printf("请输入要删除学生的学号:\n"); scanf("%d", &xh); for (i = 0; i <*N; i++) { if (stu[i].num==xh) { flag = 1; for (j = i; j <(*N)-1; j++) { stu[j] = stu[j + 1]; } } } if (flag==0) { printf("该学号不存在!\n"); } if (flag==1) { printf("成功将该学生信息删除,并保留在别的文件中!\n"); (*N)--; } system("pause"); } void add(struct Student *stu,int *N) { int i,m,j,flag,k; k=(*N); printf("请输入待增加的学生数:\n"); scanf("%d", &m); stu=(struct Student *)malloc(sizeof(struct Student)*((*N)+m)); if (m>0){ do { flag = 1; while (flag) { flag = 0; printf("请输入第%d位学生的学号:\n", k + 1); scanf("%d",&stu[k].num); for (j = 0; j < k; j++){ if (stu[k].num==stu[j].num) { printf("该学号已存在\n"); flag = 1; break; } } } printf("学生学号\t学生姓名\t年龄\t性别\t出生年份\t出生月份\t出生日\t地址\t电话号码\t邮箱\n"); for(i=0; i<m; i++) scanf("%d %s %d %c %d %d %d %s %s %s",&stu[(*N)+i].num,stu[(*N)+i].name,&stu[(*N)+i].age,&stu[(*N)+i].sex,&stu[(*N)+i].birthday.year,&stu[(*N)+i].birthday.month,&stu[(*N)+i].birthday.day,stu[(*N)+i].address,stu[(*N)+i].tel,stu[(*N)+i].Email); if (0 == flag) { k++; } } while (k<(*N)+m); } (*N)=(*N)+m; system("pause"); } int main() { int num,flag=1,N; printf("请输入要录入的学生信息个数\n"); scanf("%d",&N); struct Student *stu; stu=(struct Student *)malloc(sizeof(struct Student)*N); //struct Student *stu1; //stu1=(struct Student *)malloc(sizeof(struct Student)*N); while (flag!=0) { printf(" *************************************************\n\n"); printf(" * 学生信息管理系统 *\n \n"); printf(" *************************************************\n\n"); printf("********************系统功能菜单*********************\n"); printf(" ---------------------- ---------------------- \n"); printf(" ********************************************* \n"); printf(" 1.录入学生信息 2.浏览当前信息 \n"); printf(" ********************************************* \n"); printf(" * 3.查询学生信息 4.修改学生信息 \n"); printf(" ********************************************* \n"); printf(" * 5.删除学生信息 6 增添学生信息 \n"); printf(" ********************** ********************** \n"); printf(" ---------------------- ---------------------- \n"); printf("请选择菜单编号:"); scanf("%d", &num); switch (num) { case 1: insert(stu,N); break; case 2: disp(stu,N); break; case 3: find(stu,N); break; case 4: modify(stu, N); break; case 5: delete(stu, &N); break; case 6: add(stu,&N); break; case 7: flag=0; printf("即将退出程序!\n"); default: printf("NULL\n"); } } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 PointNet++的onnx模型只能使用一次
- ¥20 西南科技大学数字信号处理
- ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
- ¥30 STM32 INMP441无法读取数据
- ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。