I/O输入与输出函数

I/o输入与输出函数

要说到I/O函数,就不得不提到一个概念——流。就c语言来说 ,所有的I/O操作都是简单的从程序中移入与
移出字节的问题。因此 ,便引入了字节流这件东西。
绝大多数的流是完全缓冲的,这就说明 "读取"与 "写入",其实是从一块缓冲区的 内存区域 中来取得数据的。
用于输出流 的缓冲区,只有被写满时,才会被刷新 (fflush), 写入到文件中。
fflush() 函数的作用就是, 不管缓冲区有没有被 写满,都会迫使缓冲区中的数据,立即写入。
 流 ,又可以分为文本流 和二进制流 。

文本流    

顾名思义 ,就是以文本的形式显示的流 ,文本流中 ,文本行的最大长度 ,标准规定 ,至少允许254 个字符,
另外,文本行的结束方式 ,在不同的系统下是不同的:
在MS-DOS系统中,文本文件规定,以一个换行符与回车符 结尾;在Linux系统中只能以一个换行符结尾。

二进制流

二进制流,就是将流中数据 ,以二进制的形式,存储到文件中 。而且 ,完全根据二进制的形式 从文件中读到
程序中。并没有做什么改变 ,这种流适用于 非文本数据。
流I/O总览 
流可分为 标准流 和  文件流
              标准流   有  stdin    标准输入流
 stdout  标准输出流
 stderr   标准错误流
              文件流    表示的是   文件读写是定义的流 
  格式为 FILE *fp   fp就表示一个文件流

另外 ,文件流 每次使用时 ,要用fopen打开流 ,使用结束后要用fclose  关闭流
      而,标准流则会,自动打开,自动关闭。
标准流的I/O函数 
 
以三种基本形式处理数据 :单个数据 ,文本行 ,二  制数据;


输入与输出函数家族




下面就是我用代码来演示一些函数的功能 
代码运行  getchar函数 
这段代码的作用是将一串字符串数字转换微整形数据
isdigit函数判断是不是数字字符 
int main()
{
	char ch  =0 ;
	int ret = 0;
	while(isdigit(ch = getchar()))
	{
		ret = ret *10 + ch -'0';
	}
	printf("%d\n",ret);
	system("pause");
	return  0;
}
代码运行getc函数
这段代码的作用就是 完整复制一个文本文件
int main(int argc ,char *argv[])
{
	FILE *pfr = NULL;
	FILE *pfw = NULL;
	char ch= 0;
	if(argc < 3)
	{
		printf("参数不够;\n");
		exit(EXIT_FAILURE);
	}
	pfr = fopen(argv[1],"r");
	if(pfr ==NULL)
	{
		perror("Read error:");
		exit(EXIT_FAILURE);
	}
	pfw = fopen(argv[2],"w");
	if(pfw ==NULL)
	{
		perror("Write error:");
		fclose(pfr);
		exit(EXIT_FAILURE);
	}
	while((ch = getc(pfr))!= EOF)
	{
		putc(ch,pfw);
	}
	fclose(pfr);
	fclose(pfw);
	system("pause");
	return  0;
}
了解sprintf  函数与sscanf的作用
sprin tf  将不同类型的数据写入到 字符串内存中
sscanf 将字符串内存中的数据对应读取到  不同类型的数据中 
<span style="font-size:18px;">typedef struct stu
{
	char name[6];
	int age;
	float score;
}stu;
int  main()
{
	char arr[40]={"wangwu 20 39.0f"};
	stu  s;
	strcpy(s.name , "lisi");
	s.age = 20;
	s.score= 90.0f;
	/*sprintf(arr,"%s %d %f",s.name ,s.age,s.score);*/
	sscanf(arr,"%s%d%f",s.name,&s.age,&s.score);
	printf("%s\n",arr);
	system("pause");
	return 0;
}</span>
撤销字符I/O函数  ungetc
当你从一个流中读取 一串数字,在读取之前,你无法知道下个字符,必须连续读取 , 直到一个非数字
为止,但又不希望丢失这个字符 ,该怎么办?
这时就会用到 这个函数
int ungetc( intc, FILE *stream );
        函数的参数为   撤销的字符 与 所在的流
代码的实现

int main()
{
	char ch  =0 ;
	int ret = 0;
	while(isdigit(ch = getchar()))
	{
		ret = ret *10 + ch -'0';
	}
	printf("%d\n",ret);
	ungetc(ch,stdin);
	putchar(getchar());
	
	system("pause");
	return  0;
}


这篇博客写的不是很好 ,以后会继续努力的


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值