IO--标准函数使用方法

 

目录

注意点 

 1、IO的分类

 重点

 1.fprintf()的使用

         1.错误使用:

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

 2.fscanf()的使用       

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

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

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

 总结


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

注意点 

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

 1、IO的分类

  1. 文件IO
  2. 标准IO

 重点

1、标准IO函数

fopen    /    fclose

fprintf    /    fscanf

fputc    /    fgetc

fputs    /    fgets

fwrite    /    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 50

int 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.txt
    while (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:指定要写入的文件,对应文件的流指针
    
返回值:
成功,返回非负整数
失败,返回EOF


char *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:输出写入的文件

返回值:
成功,返回写入的数据项数,不是字节数
失败,返回小于指定要写入的数据项数,或者返回0



size_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函数,关于缓冲区只需要了解是一个存放待刷新数据的地方就可以了,否则会难以理解 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值