利用文件保存数据(c语言)

将数据储存到本地文件

环境:CentOS7
后附常用文件操作函数和功能表
文件后缀
.doc(Word文件)、.txt(文本文件)、.dat(数据文件)、.c(C语言源程序文件)、.cpp(C++源程序文件)、.for(FORTRAN语言源程序文件)、.pas(Pascal语言源程序文件)、.obj(目标文件)、.exe(可执行文件)、.ppt(电子幻灯文件)、.bmp(图形文件)、.jpg(图像文件)。

文件类型

  • 程序文件(可执行)
  • 数据文件(ASCII文件和二进制文件)
    ①ASCII文件:文本文件,每一个字节存放一个字符ASCII代码(字符型、数值型)。
    ②二进制文件:把内存中的数据按原来的样子输出到磁盘上存储(数值型)。
    例子:输入10000
    ASCII形式输出到磁盘(5字节)
    二进制形式输出到磁盘(2字节)

文件指针
每个使用过的文件都在内存中开辟出一个相应的文件信息区存放文件相关信息。这些信息存在一个结构体变量(FILE)中。
例:FILE * fp

打开和关闭文件

  • 打开数据文件(fopen)
    fopen (文件名,使用文件方式);
    例:
    FILE * fp; #定义一个文件指向变量fp
    fp = fopen (“a”, “r”); #将fopen函数的返回值赋给fp
  • 关闭文件(fclose)
    fclose (文件指针)
    例:fclose (fp);

PS:

使用意思
r只读(ASCII文件)
w只写(ASCII文件)
a追加(向ASCII文件尾添加数据)
rb只读(二进制文件)
wb只写(二进制文件)
ab追加(向二进制文件尾添加数据)
r+读写(打开一个ASCII文件读写)
w+读写(建立一个新的ASCII文件)
a+读写(ASCII文件)
rb+读写(二进制文件)
wb+读写(二进制文件)
ab+读写(二进制文件)

示例1:输入内容再送到磁盘

#include <stdio.h>
#include <stdlib.h>
int main() {
    FILE * fp;
    char ch, filename[10];
    printf ("请输入文件名:");
    scanf ("%s", filename);
    if ((fp = fopen (filename, "w")) == NULL) {
        printf ("无法打开\n");
        exit (0);
        }
     ch = getchar();
     printf ("请输入内容,以#号结束:");
     ch = getchar();
     while (ch != '#') {
        fputc (ch, fp);
        putchar (ch);
        ch = getchar ();
        }
      fclose (fp);
      putchar (10);
      return 0;
      }
      
[root@chenshuyi c]# gcc -o fputc fputc.c
[root@chenshuyi c]# ./fputc
请输入文件名:one
请输入内容,以#号结束:happy every days!#
happy every days!
[root@chenshuyi c]# cat one
happy every days!

在这里插入图片描述

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以将保存链表到文件的操作封装成一个子函数,以便在程序重复利用。下面是一个示例代码,演示如何利用子函数将链表保存文件: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Node { int id; char name[20]; struct Node* next; } Node; // 将链表保存文件 int saveListToFile(Node* head, const char* fileName) { // 打开文件 FILE* fp; fp = fopen(fileName, "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); return 1; } 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; } // 保存链表到文件 int result = saveListToFile(head, "data.txt"); if (result) { printf("链表保存成功!\n"); } else { printf("链表保存失败!\n"); } // 释放链表占用的内存 Node* p = head; while (p != NULL) { Node* next = p->next; free(p); p = next; } return 0; } ``` 在上面的示例代码,我们将保存链表到文件的操作封装成了一个名为saveListToFile的子函数。该函数接受两个参数,分别为链表头指针和文件名。在函数内部,我们使用fopen函数打开文件,然后遍历链表,将每个节点的数据输出到文件。最后,我们使用fclose函数关闭文件,并返回1表示操作成功。在主函数,我们先创建了一个包含5个节点的链表,然后调用saveListToFile函数将链表保存到名为"data.txt"的文件。最后,我们释放链表所占用的内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值