C 输入输出函数
流
就C程序而言,所有的I/O操作只是简单地从程序移入或移出字节的事情。这种字节流便称为流( stream )。
绝大多数流是完全缓存的,这意味着“读取”和“写入”实际上个是从一块被称为缓冲区的内存区域来回复制数据。
用于输出流的缓冲区只有当它写满时才会被刷新( flush ),写入到设备或文件中。一次性把写满的缓冲区写入和逐片把程序产生的输出分别写入相比效率更高。类似,输入缓冲区当它为空时通过设备或文件读取下一块较大的输入,重新填充缓冲区。
只有当操作系统可以断定它们与交互设备并无联系时才会进行完全缓冲。
每个流都有一个相应的FILE结构关联。
流分为文本流( text )和二进制流( binary ),对于每个ANSI C程序,运行时系统必须提供至少三个流
- 标准输入( standard input,
stdin,键盘 ) - 标准输出( standard output,
stdout,终端或屏幕 ) - 标准错误( standard error,
stderr)
打开流
FILE*
fopen( char const *name, char const *mode );
FILE*
freopen( char const *filename, char const *mode, FILE *stream );
以mode字段的格式打开文件名为name的文件,执行成功返回一个指向FILE结构的指针,执行失败返回NULL
示例
FILE *fp;
fp = fopen( "data3.txt", "r" );
if( fp == NULL ){
perror( "data3.txt" );
exit( EXIT_FAILURE );
}
其中perror是一个报告错误的函数,原型如下
void
perror( char const *message );
标准库函数在一个外部整型变量errno(在error.h中定义)中保存错误代码,当库函数失败时,errno才会被设置。当data3.txt不存在时,程序非正常退出,屏幕输出以下信息
data3.txt: No such file or directory
请按任意键继续. . .
freopen函数用于打开或重新打开一个特定的文件流,首先试图关闭这个流,然后再按照mode字段重新打开这个流
关闭流
int
fclose( FILE *f );
对于输出流,fclose函数在文件关闭之前刷新缓冲区,执行成功返回零值,失败返回EOF
标准流I/O
以三种基本形式处理数据
- 单个字符
- 文本行
- 二进制数据
标准I/O常量
EOF
提示达到文件尾FOPEN_MAX
一个程序能同时打开这么多的文件FILENAME_MAX
文件名的最大长度
字符I/O
getchar家族
int
fgetc( FILE *stream );
int
getc( FILE *stream );
int
getchar( void );
getchar始终从stdin读取
putchar家族
int
fputc( int character, FILE *stream );
int
putc( int character, FILE *stream );
int
putchar( int character );
putchar输出到stdout
撤销字符I/O
int
ungetc( int character, FILE *stream );
把先前读入的字符返回到流中
未格式化的文本行I/O
fgets和gets
char*
fgets( char *buffer, int buffer_size, FILE *stream );
char*
gets( char *buffer );
gets只能用于stdin,fgets可以用于所有的输入流fgets的第二个参数是缓冲区长度参数,它只读取输入的前buffer_size - 1个字符;gets没有缓冲区长度参数,当输入的字符长度大于缓冲区最大长度时,多出来的字符将写入到后面的内存位置,破坏了其他不相关变量的值fgets会读入结尾的回车,gets不会
fputs和puts
int
fputs( char const *buffer, FILE *stream );
int
puts( char const *buffer );
puts默认输出到stdout,fputs可以用于所有的输出流puts会在输出末尾追加一个回车,fputs不追加
格式化的文本行I/O
scanf家族
int
fscanf( FILE *stream, char const *format, ... );
int
scanf( FILE *stream, char const *format, ... );
int
sscanf( char const *string, char const *format, ... );
- 每个原型中的省略号表示 一个可变长度的指针列表,从输入转换而来的值按顺序逐个存储到对应的内存位置
fscanf从第一个参数给出的流读取,scanf从stdin读取,sscanf从第一个参数给出的字符串中读取- 函数的返回值是被转换的输入值的个数,当文件到达尾部返回
EOF
printf家族
int
fprintf( FILE *stream, char const *format, ... );
int
printf( FILE *stream, char const *format, ... );
int
sprintf( char *buffer, char const *format, ... );
fprintf输出到第一个参数给出的流,printf输出到stdout,sprintf输出到第一个参数给出的字符串中sprintf没有指明缓冲区大小的参数,解决方法是在format字段限制输出的长度
二进制I/O
size_t
fread( void *buffer, size_t size, size_t count, FILE *stream );
size_t
fwrite( void *buffer, size_t size, size_t count, FILE *stream )
刷新和定位
int
fflush( FLIE *stream );
清空一个流的缓冲区,当stream为stdin时可用于吃掉回车
long
ftell( FILE *stream );
int
fseek( FILE *stream, long offset, int from );
void
rewind( FILE *stream );
ftell返回流的当前位置fseek在流中定位
| from | |
|---|---|
SEEK_SET |
起始位置起offset个位置,offset为非负数 |
SEEK_CUR |
当前位置起offset个位置,offset可正可负 |
SEEK_END |
尾部位置起offset个位置,offset可正可负,若为正值定位到文件尾后面 |
rewind函数将指针设置回起始位置,同时清除错误提示标志
C 输入输出函数的更多相关文章
- c语言的输入输出函数
参考文章: http://blog.sina.com.cn/s/blog_784f40b80100psg9.html C语言输入输出函数分为两类: 1.格式化输入输出函数 2.非格式化输入输出 --- ...
- C语言中最常用的三种输入输出函数scanf()、printf()、getchar()和putchar()
本文给大家介绍C语言中最常用的三种输入输出函数scanf().printf().getchar()和putchar(). 一.scanf()函数格式化输入函数scanf()的功能是从键盘上输入数据,该 ...
- C语言中输入输出函数
1.1.1 格式化输入输出函数Turbo C2.0 标准库提供了两个控制台格式化输入. 输出函数printf() 和scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据.pri ...
- Linux C 程序 输入输出函数(THREE)
标准输入输出函数#include<stdio.h>stdio 是 standard input & output 的缩写 字符数据输入输出函数: putchar() , getch ...
- c语言输入输出函数
上学年学习c语言的时候比较匆忙,没好好吸收. 现在有时间好好复习下. 本文就c语言常见输入函数进行简单介绍,对比. ps:由于自己能力有限,时间有限,多数介绍,总结都是摘录网上相关学习资料,下面给出本 ...
- C字符串输入输出函数
下面就几个常用的字符串输入输出函数做个小小的总结TAT 使用时添加头文件:#include<stdio.h>. scanf("格式控制字符串",变量地址列表):(pri ...
- C++中的字符串的输入输出函数、空字符与空格的区别、字符变量赋值和字符串初始化
一.字符串输入输出函数 1. cin.get() 逐个字符输入输出 2. cin 可以将整个字符串一次性输入,但是,cin将空格.Tab和回车键,因此不能用于数组的一次性输入. 注意:ci ...
- C语言 · 字符串输入输出函数
算法提高 3-2字符串输入输出函数 时间限制:1.0s 内存限制:512.0MB 描述 编写函数GetReal和GetString,在main函数中分别调用这两个函数.在读入一个实数 ...
- 【222】◀▶ IDL 输入输出函数说明
参考:I/O - General Input/Output Routines —— 基本输入输出函数 01 PRINT/PRINTF 格式化输出. 02 READ/READF 格式化输入. 0 ...
- C语言学习<输入输出函数,函数的调用>
#include <stdio.h> /* 输入输出函数的学习 函数的调用 2017.05.25 soulsjie */ //输入连个数字求最大值 void main(){ int Max ...
随机推荐
- 初步测试VS2017+Win10IoT,基于World Map of Makers
测试World Map of Makers Demo,创建一个简单的internet连接应用程序来查询web API的状态(目测是一个延时时间),并使用该信息切换LED. 官方仓库的Solution是 ...
- MySQL锁(表锁,行锁,共享锁,排它锁,间隙锁)使用详解
锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是协调多个进程或县城并发访问某一资源的一种机制.在数据库当中,除了传统的计算资源(CPU.RAM.I/O等等)的争用之外,数据也是一 ...
- configparser生成模块写
# -*-coding:utf-8-*-__author__ = "logan.xu"#写配置文件import configparserconfig = configparser. ...
- plsql中数据生成工具data generator的使用
使用数据库时,有时需要使用大量的数据,可以用PLSQL Developer提供的Data Generator工具, 这里记录一下工具的介绍及几个使用注意事项 1.工具介绍 功能入口位于 工具 菜单下, ...
- seo高手教你seo优化排名该怎么做
seo高手教你seo优化排名该怎么做 第一节:如何在本地搭建服务器环境 本节课程主要是讲如何利用 Xampp在本地搭建服务器环境 .网站使用asp和php比较常见,当然,就目前而言,使用php搭建网站 ...
- SpringBoot笔记(2)
一.容器功能 1.1 组件添加 1. @Configuration Full模式:获取对象时,首先在容器内搜索是否存在,如存在直接拿出 默认为Full模式,单例 配置类组件之间有依赖关系,方法会被调用 ...
- 微信小程序--聊天室小程序(云开发)
微信小程序 -- 聊天室小程序(云开发) 从微信小程序开发社区更新watch接口之后,一直在构思这个项目.项目已经完成很久,但是一直都没有空写一篇博客记录展示一下. 开源地址 wx-cloud-im: ...
- Three.js 中 相机的常用参数含义
Three.js 中相机常用的参数有up.position和lookAt. position是指相机所在的位置,将人头比作相机的话,那么position就是人头的中心的位置: up类似于人的脖子可以调 ...
- SQL查询语句执行流程
msyql执行流程 你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:: select * from T where ID=10: 我们看到的只是输入一条语句,返回一个结果,却不知 ...
- NOIP模拟22「d·e·f」
T1:d 枚举. 现在都不敢随便打枚举了. 实际上我们只关注最后留下的矩阵中最小的长与宽即可. 所以我们将所有矩阵按a的降序排列. 从第\(n-m\)个开始枚举. 因为你最多拿 ...