c语言文件知识详解

目录

一、文件的使用

二.fgets(从文件等流中写出)

三、fputs(写入文件中)

四、fputc、fgetc类似,只是fputc、fgetc、只能获得单个字符

 五、fprintf 的使用(将格式化数据写入流)

六、fscanf使用(从流中读取格式化数据)


一、文件的使用

//文件的使用
//文件分为 文本文件和二进制文件
//可以用结构体类型来定义文件类型的指针形式:FI(i大写)LE*fp
//fopen函数的使用形式:fopen(文件名,文件使用方式)
//函数返回FILE*,无论何种方式打开失败返回NULL
fclose关闭文件
//文件使用方式:

r:为读打开的文本文件(不存在则出错)

rb:为读打开的二进制文件

 w:为写打开的文本文件(不存在则新建,存在则覆盖原有内容)

wb:为写打开的二进制文件

ab+:与a+相同,只是添加数据后,可以通过位置函数,设置读的起始位置

a:为在文件后面添加数据打开的文本文件

ab:为文件后添加数据打开的二进制文件

a+:与a相同,只是添加数据后,可以从头开始读

r+:为读和写打开的文本文件(不存在则出差)

rb+:为读和写打开的二进制文件

w+:先建立一个新文件,进行写操作,随后可以从头开始读,如果指定文件已存在,文件原有内容消失
wb+:功能与w+相同,只是随后的读写时,可以以位置函数设置读和写的起始位置

二.fgets(从文件等流中写出)

//char* fgets(char* str, int num, FILE* stream);
//从流中读取字符并将其作为 C 字符串存储到 str 中,直到读取 (num - 1) 字符或达到换行符或文件末尾,以先发生者为准。
//换行符会使 fgets停止读取,但该函数将其视为有效字符,并包含在复制到 str 的字符串中,终止空字符会自动追加到复制到 str 的字符之后。
//请注意,fgets 与 gets 完全不同:fgets 不仅接受流参数,还允许指定 str 的最大大小,并在字符串中包含任何结尾换行符。

1.使用案例

//#include<stdio.h>
//int main()
//{
//    char buf[100] = {"555"};
//    FILE*pf=fopen("C:\\c\\c2\\test.txt", "r");
//    if (pf==NULL)
//    {
//        return 0;
//    }
//    fgets(buf, 100, pf);//从文件流中,写出数组buf中,100为指定写出大小
//    printf("%s", buf);//再将数组输出到屏幕
//    fclose(pf);
//    pf == NULL;

//    return 0;
//}

1.2运行效果

在文件test.txt中先写入666,程序运行后,fgets会从文件中读出数据

 

 

三、fputs(写入文件中)

//int fputs(const char* str, FILE* stream);
//写入要流式传输的字符串
//将 str 指向流的 C 字符串写入流。
//该函数开始从指定的地址 (str) 进行复制,直到到达终止空字符 ('\0')。此终止空字符不会复制到流中

//注意该函数是拷贝一份数据到指定流中,不是剪切

1.案例

#include<stdio.h>
//int main()
//{
//    char buf[100] = { "0"};
//    printf("输入句子\n");
//    fgets(buf, 100, stdin);//stdin 标准输入  stdout 标准输出
//    FILE* pf = fopen("C:\\c\\c2\\test.txt", "a");
//    if (pf==NULL)
//    {
//        return 0;
//    }
//    fputs(buf, pf);
//    fclose(pf);
//    pf == NULL;
//    return 0;
//}

1.2运行效果

输入句子后,fputs将"一个"追加到文件中

四、fputc、fgetc类似,只是fputc、fgetc、只能获得单个字符

#include<stdio.h>
int main()
{
    char buf=0;
    FILE* pf = fopen("C:\\c\\c2\\test.txt", "w");
    if (pf==NULL)
    {
        return 0;
    }
    //fputc('c', pf);或
    buf = getchar();
    fputc(buf, pf);
    fclose(pf);
    pf == NULL;
    return 0;
}

 运行效果

 五、fprintf 的使用(将格式化数据写入流)

//int sprintf ( char * str, const char * format, ... );

1.使用案例

struct S
{
    int a;
    float m;
    char arr[20];
};
int main()
{
    struct S s = { 10,3.14f,"hello" };//3.14f  f是float类型
    FILE* pf = fopen("C:\\c\\c2\\test.txt", "w");
    if (pf==NULL)
    {
        return 0;
    }
    fprintf(pf, "%d %f %s", s.a, s.m, s.arr); 与printf用法一致,但要指定输出流
    fclose(pf);
    pf == NULL;
    return 0;
}

1.2运行效果

//sprintf 有能力将一个结构体的内容转换为字符串
//将格式化数据写入字符串

2.案例

//struct S
//{
//    int a;
//    float m;
//    char arr[20];
//};
//int main()
//{
//    struct S s = { 10,3.14f,"hello" };
//    char buf[50] = { 0 };
//    sprintf(buf, "%d %f %s", s.a, s.m, s.arr);
//    //将格式化的数据转换为字符串放在buf中
//    printf("%s\n", buf);
//    return 0;
//}

2.1运行效果

六、fscanf使用(从流中读取格式化数据)

1.案例

int main()
{
    struct S s={0};
    FILE* pf = fopen("C:\\c\\c2\\test.txt", "r");
    if (pf==NULL)
    {
        return 0;
    }
    fscanf(pf, "%d %f %s", &s.a, &s.m, s.arr);//从流中读取数据,用法与scanf一致,但要指定流
    printf("%d %f %s", s.a, s.m, s.arr);
    return 0;

2.运行效果

 

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值