C语言下链表数据保存到.txt文件失败

问题描述

保存链表中的数据的代码

int readin3(ConRecNode* head) {
	ListConRec p = head->next;
	FILE* fp;
	char fileName[50];
	printf("请输入文件名:\n");
	scanf_s("%s", fileName,31);
	fp = fopen(fileName, "w");
	while (NULL == fp) {
		printf("文件保存失败,请重新输入文件保存路径:\n");
		scanf("%s", fileName);
		fp = fopen(fileName, "w");
	}
	while (p) {
		fprintf(fp, "%d %s %s %.2lf\n", p->LogID, p->contime, p->connote, p->charge);
		p = p->next;
	}
	fclose(fp);
	return 1;
}

一直试图把这些数据直接保存到C盘根目录下,但是失败了,以为是自己代码问题。
在这里插入图片描述


原因分析:

后来问了一下学长,才知道不可以将文本文件直接保存到C盘根目录下
而这样子就可以成功
在这里插入图片描述
🤣看来光会敲代码不行呀,还得好好了解Windows系统

C语言,我们可以通过文件操作函数来将链表保存文件。具体的实现方式如下: 1. 打开文件 我们使用fopen函数打开文件,如果打开文件成功,则会返回一个文件指针,否则返回NULL。在打开文件时,需要指定文件名和打开方式。如果是写入模式,则使用"w"或"w+"打开文件;如果是追加模式,则使用"a"或"a+"打开文件。 ```c FILE* fp; fp = fopen("data.txt", "w"); if (fp == NULL) { printf("文件打开失败!\n"); return; } ``` 2. 将链表数据写入文件 我们通过遍历链表,将每个节点的数据写入文件。在写入文件时,可以使用fprintf函数将数据按指定格式输出到文件。 ```c // 遍历链表,将每个节点的数据写入文件 Node* p = head; while (p != NULL) { fprintf(fp, "%d %s\n", p->id, p->name); p = p->next; } ``` 3. 关闭文件 当我们完成文件操作后,需要使用fclose函数关闭文件,释放文件指针所占用的资源。 ```c fclose(fp); ``` 完整示例代码如下: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Node { int id; char name[20]; struct Node* next; } Node; int main() { // 创建链表 Node* head = NULL; Node* tail = NULL; for (int i = 1; i <= 5; i++) { Node* node = (Node*)malloc(sizeof(Node)); node->id = i; sprintf(node->name, "name%d", i); node->next = NULL; if (head == NULL) { head = node; } else { tail->next = node; } tail = node; } // 打开文件 FILE* fp; fp = fopen("data.txt", "w"); if (fp == NULL) { printf("文件打开失败!\n"); return 0; } // 遍历链表,将每个节点的数据写入文件 Node* p = head; while (p != NULL) { fprintf(fp, "%d %s\n", p->id, p->name); p = p->next; } // 关闭文件 fclose(fp); // 释放链表占用的内存 p = head; while (p != NULL) { Node* next = p->next; free(p); p = next; } return 0; } ``` 在上面的示例代码,我们创建了一个包含5个节点的链表,并将链表数据保存到了名为"data.txt"的文件。在保存数据时,我们使用fprintf函数将每个节点的id和name输出到文件。最后,我们释放链表所占用的内存,并关闭文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值