运用C语言如何删除文件中的某条数据
求大神!!学生管理系统的删除功能,如何实现。我这函数怎么不能删除之前录入的学生数据呢头文件和全局变量:#include<stdio.h>#include<stdlib.h...
求大神!!
学生管理系统的删除功能,如何实现。
我这函数怎么不能删除之前录入的学生数据呢
头文件和全局变量:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct student
{
char num[20];
char name[20];
char shuxue[20];
char yingyu[20];
char wuli[20];
char jisuanji[20];
};
FILE *fp;
struct student stu[10000],stu2[10];
char wenjianming[20];
int i,k,flag2=0,c=0,m=0,n=0,x=0;
int j=0;//学生个数!
int b=0;//追加学生个数!!
int s=0;//删除学生个数!!
int sum=0;//总的学生个数!!
int flag=0;
函数:
nt shanchu()
{
sum=n+m-s;
if(sum==0)
{
printf("您得先录入,再删除~!笨!~\n");
getchar();
return 0;
}
char xuehao[20];
printf("请输入你要打开的文件名");
scanf("%s",&wenjianming);
if((fp=fopen(wenjianming,"rb+"))==NULL)
{
puts("the file can't be opened");
c++;
return 1;
}
printf("请输入要删除的人的学号:");
scanf("%s",xuehao);
for(i=0;i<sum;i++)
{
if(strcmp(stu[i].num,xuehao)==0)
{
printf("%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
for(k=i;k<sum-1;k++)
{
strcpy(stu[k].num,stu[k+1].num );
strcpy(stu[k].name ,stu[k+1].name );
strcpy(stu[k].shuxue ,stu[k+1].shuxue );
strcpy(stu[k].wuli,stu[k+1].wuli );
strcpy(stu[k].yingyu,stu[k+1].yingyu );
strcpy(stu[k].jisuanji,stu[k+1].jisuanji );
}
break;
}
}
fclose(fp);
s++;
printf("删除后的数据:\n");
for(i=0;i<sum-s;i++)
{
printf("%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
fprintf(fp,"%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
}
fclose(fp);
printf("删除成功!\n");
return 0; 展开
学生管理系统的删除功能,如何实现。
我这函数怎么不能删除之前录入的学生数据呢
头文件和全局变量:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct student
{
char num[20];
char name[20];
char shuxue[20];
char yingyu[20];
char wuli[20];
char jisuanji[20];
};
FILE *fp;
struct student stu[10000],stu2[10];
char wenjianming[20];
int i,k,flag2=0,c=0,m=0,n=0,x=0;
int j=0;//学生个数!
int b=0;//追加学生个数!!
int s=0;//删除学生个数!!
int sum=0;//总的学生个数!!
int flag=0;
函数:
nt shanchu()
{
sum=n+m-s;
if(sum==0)
{
printf("您得先录入,再删除~!笨!~\n");
getchar();
return 0;
}
char xuehao[20];
printf("请输入你要打开的文件名");
scanf("%s",&wenjianming);
if((fp=fopen(wenjianming,"rb+"))==NULL)
{
puts("the file can't be opened");
c++;
return 1;
}
printf("请输入要删除的人的学号:");
scanf("%s",xuehao);
for(i=0;i<sum;i++)
{
if(strcmp(stu[i].num,xuehao)==0)
{
printf("%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
for(k=i;k<sum-1;k++)
{
strcpy(stu[k].num,stu[k+1].num );
strcpy(stu[k].name ,stu[k+1].name );
strcpy(stu[k].shuxue ,stu[k+1].shuxue );
strcpy(stu[k].wuli,stu[k+1].wuli );
strcpy(stu[k].yingyu,stu[k+1].yingyu );
strcpy(stu[k].jisuanji,stu[k+1].jisuanji );
}
break;
}
}
fclose(fp);
s++;
printf("删除后的数据:\n");
for(i=0;i<sum-s;i++)
{
printf("%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
fprintf(fp,"%s %s %s %s %s %s\n",stu[i].num,stu[i].name,stu[i].shuxue,stu[i].yingyu,stu[i].wuli,stu[i].jisuanji);
}
fclose(fp);
printf("删除成功!\n");
return 0; 展开
4个回答
展开全部
比如
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char *insert = "EE,EE,EE,", tmp[256]={0};
int pos, i;
/*test.txt文件内容:01,00,00,00,0E,00,00,00,00,00,00,E1,E2,00,00,00,00*/
fp = fopen("test.txt", "r+");
/*1、等长覆盖*/
fseek(fp, 12, 1);
fprintf(fp, "0F"); /*直接写入等长度的数据就可以完成覆盖*/
/*2、E2后插入“EE,EE,EE,” */
fseek(fp, 25, 1);
pos = ftell(fp); /*插入位置*/
fgets(tmp, 256, fp); /*把后面的数据缓存*/
fseek(fp, pos, 0); /*移动到插入位置*/
fprintf(fp, insert); /*插入,就是写入数据*/
fprintf(fp, tmp); /*把原来的数据再写回来, 完成*/
/*3、01读取后++两次,并重新写回文件*/
rewind(fp);
fscanf(fp, "%x", &i); /*读取数据*/
i = i+2; /* +2 */
fseek(fp, -2, 1); /*调整指针*/
fprintf(fp, "%02x", i); /*写文件*/
fclose(fp);
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char *insert = "EE,EE,EE,", tmp[256]={0};
int pos, i;
/*test.txt文件内容:01,00,00,00,0E,00,00,00,00,00,00,E1,E2,00,00,00,00*/
fp = fopen("test.txt", "r+");
/*1、等长覆盖*/
fseek(fp, 12, 1);
fprintf(fp, "0F"); /*直接写入等长度的数据就可以完成覆盖*/
/*2、E2后插入“EE,EE,EE,” */
fseek(fp, 25, 1);
pos = ftell(fp); /*插入位置*/
fgets(tmp, 256, fp); /*把后面的数据缓存*/
fseek(fp, pos, 0); /*移动到插入位置*/
fprintf(fp, insert); /*插入,就是写入数据*/
fprintf(fp, tmp); /*把原来的数据再写回来, 完成*/
/*3、01读取后++两次,并重新写回文件*/
rewind(fp);
fscanf(fp, "%x", &i); /*读取数据*/
i = i+2; /* +2 */
fseek(fp, -2, 1); /*调整指针*/
fprintf(fp, "%02x", i); /*写文件*/
fclose(fp);
system("PAUSE");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在fprintf之前已经关闭文件了,应该用写模式打开文件。
fp = fopen( wenjianming, "wb+" )
追问
这样就可以了?
追答
最后一个for循环前面那个fclose(fp)什么意思。
还要他们说的
scanf("%s",wenjianming);
改了先试试看吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这句话明显错误:scanf("%s",&wenjianming);
wenjianming变量本身就是地址,不需要取地址的。
wenjianming变量本身就是地址,不需要取地址的。
追问
那要怎么改呀,把&去掉就可以了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
私信我把。。。这尼玛这么一坨。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询