C语言结构体指针 删除函数 为什么删除后会显示0? 麻烦各位大神速度指点一下~~
答案:2 信息版本:手机版
解决时间 2019-10-06 06:27
已解决
2019-10-05 23:56
void Delete() //删除信息函数
{
FILE *fp;
fp=fopen("student.txt","r");
char choose;
char name[20];
p=s1;
int i=0;
fread(p,sizeof(Student),1,fp);
printf("请输入删除学生姓名:");
scanf("%s",&name);
while(strcmp(name,p->Name)!=0&&p!=NULL) //判断该学生信息是否存在
p++;i++;
if(p!=NULL)
{printf("学号 姓名 性别 语文 数学 英语 体育 C语言 总分 名次\n");
printf("%-6d%6s%6s%6d%6d%6d%6d%6d%7d%6d\n",
p->Num,p->Name,p->Sex,p->Chinese,p->Math,p->English,p->PE,p->Clanguage,p->total,p->rank);
fp=fopen("student.txt","w");
printf("\n是否删除(Y/N)");
scanf("%s",&choose);
if(choose=='y'||choose=='Y')
{
for(i=i;i{s1[i]=s1[i+1];}
printf("删除成功!\n");
fwrite(p,sizeof(struct Student),1,fp);
}
}
else printf("没有此人信息。");
printf("\n1.返回主菜单\n2.继续删除");
scanf("%s",&choose);
if(choose=='1')
Menu();
else if(choose=='2')
Delete();
最后结果就变成了第三行那样~~~
~~怎么减少一个单位啊!!我的N是define定义了的
最佳答案
2019-10-06 00:12
void Delete() { //删除信息函数
FILE *fp;
fp = fopen("student.txt","r");//默认以文本方式打开
char choose;
char name[20];
p = s1;
int i = 0;
fread(p,sizeof(Student),1,fp);// 块状读取文本文件是不合适的
printf("请输入删除学生姓名:");
scanf("%s",&name);
while(strcmp(name,p->Name) && p) //判断该学生信息是否存在
p++;i++; if(p != NULL) {
printf("学号 姓名 性别 语文 数学 英语 体育 C语言 总分 名次\n"); printf("%-6d%6s%6s%6d%6d%6d%6d%6d%7d%6d\n",p->Num,p->Name,p->Sex, p->Chinese,p->Math,p->English,p->PE,p->Clanguage,p->total,p->rank);
fp = fopen("student.txt","w");//默认以文本方式打开,fp已经用作文件student.txt,
printf("\n是否删除(Y/N)");
scanf("%s",&choose); // choose是char变量,应该用"%c"读取
if(choose=='y'||choose=='Y') {
for(i = i;i < N;i++) {
s1[i] = s1[i + 1]; // 这里删除的是第一条记录,不一定是要删除的那一条
} printf("删除成功!\n");
fwrite(p,sizeof(struct Student),1,fp);// 块状写文本文件是不合适的
}
}
else printf("没有此人信息。");
printf("\n1.返回主菜单\n2.继续删除");
scanf("%s",&choose); // 还是老问题
if(choose=='1') Menu();
else if(choose=='2') Delete(); // 递归调用会出问题的,这儿必须改 //
.................
}
全部回答
1楼
2019-10-06 00:46
#includetypedef struct stpeople
{
char name[20];
char adr[20];
char tel[20];
};
stpeople stp[5];
void input()
{
int i;
printf("输入五人信息\n");
for(i =0;i <5;i++)
{
printf("输入第%d个人的名字\n");
scanf("%s",st[i].name);
printf("输入第%d个人的地址\n");
scanf("%s",st[i].adr);
printf("输入第%d个人的电话\n");
scanf("%s",st[i].tel);
}
}
void print()
{
int i;
for(i =0;i <5;i++)
{
printf("姓名 : %s 电话: %s 地址: %s\n",st[i].name,st[i].adr,st[i].tel);
}
}
void main()
{
input();//输入
print();//输出
}
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯