您的位置:首页 > 房产 > 建筑 > IO--标准函数使用方法

IO--标准函数使用方法

2024/12/24 23:20:10 来源:https://blog.csdn.net/2301_78622258/article/details/141570652  浏览:    关键词:IO--标准函数使用方法

在学习这个知识点时,要清楚我们使用IO其实就是如何使用函数;

注意点 

  • 函数名
  • 函数参数之间的关系
  • 应用的场景,返回值
  • 缓冲区的概念

 1、IO的分类

  1. 文件IO
  2. 标准IO

 重点

1、标准IO函数

fopen    /    fclosefprintf    /    fscanffputc    /    fgetcfputs    /    fgetsfwrite    /    fread

 1.fprintf()的使用

//函数使用
#include<stdio.h>
#define MAX 50
int main(int argc, const char *argv[])
{char buf[MAX];scanf("%s",buf);FILE *fp=fopen("1.txt","w");
//定义一个文件指针指向打开的文件,fopen打开文件返回这个打开文件的地址,w是只写的意思,会先清空文件然后在把数据写入打开的文件fprintf(fp,"%s\n",buf);//这个函数的使用有三个参数,第一个参数是指向要写入的文件地址,第二个参数是写入的字符串格式,第三个参数是从程序的数组中当中写入,fclose(fp);//关闭文件return 0;
}

         1.错误使用:

//函数使用
#include<stdio.h>
#define MAX 50
int main(int argc, const char *argv[])
{char buf[MAX];scanf("%s",buf);FILE *fp=fopen("1.txt","w");FILE *fp1=fopen("2.txt","r");fprintf(fp,"%s\n",fp1);//第三个参数是一个文件指针,并不是传递数据的内容fclose(fp);fclose(fp1);return 0;
}​

        2.实现将一个文件中的内容复制到另一个文件当中

#include <stdio.h>
#define MAX 50int main(int argc, const char *argv[]) {char buf[MAX];// 打开文件 2.txt 进行读取FILE *fp1 = fopen("2.txt", "r");if (fp1 == NULL) {perror("Error opening file 2.txt");return 1;}// 打开文件 1.txt 进行写入FILE *fp = fopen("1.txt", "w");if (fp == NULL) {perror("Error opening file 1.txt");fclose(fp1);return 1;}// 从 2.txt 读取内容并写入到 1.txtwhile (fgets(buf, MAX, fp1) != NULL) //fgets()也是一个标准IO函数{fprintf(fp, "%s", buf);}// 关闭文件fclose(fp);fclose(fp1);return 0;
}

               需要记住,我们在使用fprintf()时,要注意参数,返回值,实现的功能,

fprintf()是将程序当中的数据,插入到文件当中,当然,我们之前使用printf()函数时,默认输出到终端是因为,终端也是一个文件。

        在liunx下面有三个默认终端文件-——(终端文件是指我们使用的终端,也是一个文件)

        1.stdin 标准输入 从终端文件输入到程序中

        2.stdout 标准输出 从程序中输出到终端文件

        3.stderr 标准错误输出 从程序中输出错误到终端文件,如果没错误,不输出

 2.fscanf()的使用       

#include<stdio.h>
#define MAX 50
int main(int argc, const char *argv[])
{char buf[MAX];FILE *fp=fopen("1.txt","r");//用一个文件指针指向打开的文件地址fscanf(fp,"%s\n",buf);//从上面打开的文件读取数据到buf这个字符数组当中puts(buf);//打印数组fclose(fp);//关闭文件和起到刷新缓冲区的作用return 0;
}

3.fgetc()和fputc()的使用

int fgetc(FILE *stream);
功能:从指定文件中获取单个字符
参数:
参数1: FILE *stream:指定要从那个打开的文件中获取字符返回值:
成功:返回获取到的字符ASCII
读取到文件末尾或失败,返回EOF
int fputc(int c, FILE *stream);
功能:向指定文件中输出单个字符参数:
参数1:int c:指定要输出写入到文件中的字符( c & 0xff )
参数2:FILE *stream:流指针,表示打开的文件,要写入的文件返回值:
成功,返回写入的字符
失败,返回EOF
#include<stdio.h>
int main(int argc, const char *argv[])
{char c;FILE *fp=fopen("1.txt","r");while(1){c=fgetc(fp);//返回值是文件中的字符if(c==EOF){break;}fputc(c,stdout);//将字符c的值输出到终端}fclose(fp);return 0;
}

4.fputs()和fgets()的使用

使用方法和上面的字符输入输出大致一样,只是这里读取的是字符串而已

int fputs(const char *s, FILE *stream);
功能:输出写入字符串(不包括'\0')到指定文件从程序中输出字符串到文件参数:
参数1:const char *s:字符串的首地址
参数2:FILE *stream:指定要写入的文件,对应文件的流指针返回值:
成功,返回非负整数
失败,返回EOFchar *fgets(char *s, int size, FILE *stream);
功能:从指定文件中读取字符串 从文件中读取数据到程序当中
注意:fgets在读取时,会在读取的内容后自动补上一位'\0'字符,确保拿出来的数据是字符串参数:
参数1:char *s:输入读取文件的内容存储的内存地址
参数2:int size:指定要获取的字符的个数,最多只能获取size-1个字符,在读取的末尾添加'\0'获取的大小:1、遇到 \n 就会停止本次读取,会获取到\n字符2、遇到 文件结尾,就会停止3、其他情况都读取size-1个字符
参数3:FILE *stream:要读取的文件返回值:
成功,返回 s 的地址
文件读取完毕或者失败,返回NULL 
#include<stdio.h>int main(int argc, const char *argv[])
{char buf[50];FILE *fp=fopen("1.txt","r");//打开文件while(1){if(fgets(buf,3,fp)==NULL)//从文件中读取数据到程序{break;}puts(buf);从程序输出数据到文件,默认输出到终端文件}fclose(fp);//关闭文件return 0;
}

5.fread()和fwrite()的使用

 

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
功能:将指定数据写入到指定文件中,由nmemb项数据组成,每项数据有size个字节,写入到文件参数:
参数1:const void *ptr:要输出/写入到文件的数据的首地址,void * 可以表示任意类型的数据
参数2:size_t size:每项数据的大小    
参数3:size_t nmemb:共输出写入多少项数据
参数4:FILE *stream:输出写入的文件返回值:
成功,返回写入的数据项数,不是字节数
失败,返回小于指定要写入的数据项数,或者返回0size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从文件中读取指定个数,指定大小的数据参数:
参数1:void *ptr:指定将读取的数据存储的内存地址
参数2:size_t size:每个数据的大小
参数3:size_t nmemb:要读取多少个数据
参数4:FILE *stream:读取的文件返回值:
成功,返回读取的数据个数,注意,在读取时,返回值的个数才表示具体读取到的个数
文件读取完毕或者失败,会返回小于指定大小的个数,或者等于0(已经在文件末尾,没有读取到任何数据)

 总结

本文主要重点讲了标准的IO函数,关于缓冲区只需要了解是一个存放待刷新数据的地方就可以了,否则会难以理解 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com