天天看点

C语言如何删除结构体指针,C语言结构体指针 删除函数 为什么删除后会显示0? 麻烦各位大神速度指点一下~~...

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();//输出

}

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯