c语言实现文件数据删除视频,如何用c语言实现删除文件中指定的数据;例如
匿名用戶
1級
2012-05-21 回答
你的描述不清晰,B1和B2兩個結(jié)構(gòu)數(shù)組,到底要刪除哪個?B[2]是肯定不對的,這兩個數(shù)組的長度都是2,下標只能是0和1,即B1[0], B1[1], B2[0], B2[1]。
你還是先把問題說清楚了,這個程序不難寫。
追問:
不好意思漏掉了! 是要刪除B2[1].name 和 B2[1].point
麻煩大俠指教!
追答:
還不是很清楚,文件里存了哪幾條數(shù)據(jù)?數(shù)據(jù)在B1和B2里是如何存放的。以B2為例,B2[0]或B2[1],每個里存放一條數(shù)據(jù)還是用鏈表串起來的多條數(shù)據(jù)?
我按如下的假設(shè)實現(xiàn):
文件中vip的數(shù)據(jù)以文本方式存儲(假設(shè)文件名為vip.txt),每一條數(shù)據(jù)存一個會員姓名和會員積分信息,用空格分給,每條記錄結(jié)束是一個回車符。數(shù)據(jù)讀取出來之后放入B2[1]為頭的鏈表中,然后將B2[1]代表的數(shù)據(jù)刪除(即第一條記錄),把其余部分的數(shù)據(jù)重新寫入到文件中。
前面的定義略
main()
{
FILE *fp;
struct vip *ptr, buf;
fp = fopen("vip.txt", "r");
if(fp == NULL) {
printf("Can not open file vip.txt\n");
exit(-1);
}
ptr = NULL;
/* 讀取vip.txt中的數(shù)據(jù),存放在B2[1]為頭的鏈表中 */
while(fscanf(fp, "%s %d", buf.name, &buf.point) != EOF) {
if(ptr = NULL)
ptr = &B2[1];
else {
ptr->next = (struct vip *)malloc(sizeof(struct vip));
ptr = ptr->next;
}
strcpy(ptr->name, buf.name);
ptr->point= buf.point;
ptr->next = NULL;
}
fclose(fp);
/* 將文件中的內(nèi)容顯示在屏幕上 */
ptr = &B2[1];
while(ptr) {
printf("%s %d\n", ptr->name, ptr->point);
ptr = ptr->next;
}
/* 刪除B2[1]的內(nèi)容 */
fp = fopen("vip.txt", "w"));
if(fp == NULL) {
printf("Can not write file vip.txt\n");
/* 釋放列表中分配的內(nèi)存空間,很簡單,實現(xiàn)略 */
exit(-2);
}
/* 刪除第一條記錄,用第二條記錄的值代替第一條 */
ptr = B2[1]->next;
if(ptr != NULL) {
strcpy(B2[1].name, ptr->name);
B2[1].point = ptr->point;
B2[1].next = ptr->next;
free(ptr);
}
/* 將新的鏈表保存到文件中 */
ptr = &B2[1];
while(ptr) {
fprintf(fp, "%s %d\n", ptr->name, ptr->point);
ptr = ptr->next;
}
fclose(fp);
/* 釋放分配的內(nèi)存,實現(xiàn)略 */
}
總結(jié)
以上是生活随笔為你收集整理的c语言实现文件数据删除视频,如何用c语言实现删除文件中指定的数据;例如的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言第七周答案,2017-mooc-C
- 下一篇: c语言socket鉴权,建立套接字后进行