您的位置:首页 > 编程语言 > C语言/C++

c语言 输入/输出函数

2013-08-06 21:03 1011 查看
1)错误报告<stdio.h>

void perror(void const *message);

作用:打印错误参数message,后面自动打印出一条解释当前错误信息。

2)终止程序<stdlib.h>

void exit(int status);

//status参数返回给操作系统,用于提示程序是否正常完成。这个值和main函数返回的整形

状态值相同。预订义符号 EXIT_SECCESS 和 EXIT_FAILAURE 分别代表成功和失败。返回的值可以自己设置,

不过具体含义取决于编译器。经常会在调用perror之后再调用exit终止程序。

3)

打开流

FILE *fopen(char const *name,char const *mode);

FILE :记录文件类型信息的结构体. FILE * 返回一个指向FILE结构体的指针。如果打开失败,则返回 NULL

name: 文件名

mode的值:

"r" "rb":以读取方式打开文本。二进制为 "rb"

"w" ,"wb":写

"a" "ab": 在文件后面添加的方式打开

关闭流:

int fclose(FILE *f);

执行成功返回0,失败返回 EOF

注意:文件打开,关闭操作都应该检测一下是否执行成功。

4)字符I/O

单个字符输入:getchar函数家族

int fgetc(FILE *stream);//从指定流中获取一个字符

int getc(FILE *stream); //上面版本的宏定义

int getchar(void); //从标准流(键盘)读取一个字符

注意:返回值都是int型,如果失败则返回EOF

单个字符输出:putchar家族

int fputc(int character,FILE *stream);//向指定流输出一个字符

int putc(int character,FILE *stream);

int putchar(int character);

如果写入到一个已经关闭的流,导致函数失败就返回EOF

撤销字符I/O

int ungetc(int character,FILE *stream );

把先前读入的字符返回到流中,这样它就可以重新读入。

解决的问题:假定你设计读取一串数字,当读入指定字母时停止读入。

但是你又不想丢弃这个读入的字母,这样你就可以用这个函数来获取最后一个字母。如下:

while((ch = getchar()) != EOF && isdigit(ch))

{

....;

}

//把非数字字符退回流中,这样它就不会丢失

ungetc(ch,stdin);

5)行IO

行IO可以用两种方式执行---未格式化的或格式化的。这两种形式都用于操作字符串。

区别:

未格式化:简单的读取或者写入

格式化:执行数字和其他变量的内部和外部表示之间的转换。

char *fgets(char *buffer, int buffer_size, FILE *stream );

char *gets( char *buffer );

fgets从指定stream中读取字符,并复制到buffer中。当读取到换行字符,并保存到缓存区后就不再读取

如果缓冲内存的存储字符数达到buffer_size-1个时,它也停止读取,但并不会丢失数据,因为下一次调用

fgets将从流的下一个字符开始读取。在任何情况,末尾都加上NUL使它成为一个字符串。

返回值:如果到达文件尾,就返回NULL,否则返回第一个参数,指向缓冲区的指针。

int fputs( char const *buffer ,FILE *stream );

int puts(char const *buffer );

fputs的缓冲区必须是一个字符串,以NUL结尾。写入错误,返回EOF。否则返回非负数。

格式化的IO

可以在行的一部分或多行执行IO操作

scanf家族:每个原型中的省略号表示一个可变长度的指针列表。从输入转换而来的值逐个存储到这些指针参数指向的内存。

int fscanf(FILE *stream,char const *format,...);//从指定流输入

int scanf(char const *format,...);//从标准输入读取

int sscanf(char const *string,char const *format,...);//从第一个参数所给的字符串中读取字符

当格式化字符到达末尾或者读取的输入不再匹配格式字符串所指定的类型时,输入就停止。在任何一种情况

下,被转换的输入值的数目作为函数的返回值返回。如果在任何输入值被转换之前的文件就达到尾部,函数就返回EOF。

警告:类型必须是正确类型,否则结果是垃圾。

printf家族

int fprintf( FILE *stream, char const *format ,...);

int printf(char const *format, ... );

int sprintf(char *buffer, char const *format );

6)二进制IO

把数据写到文件最有效率的方法就是用二进制形式写入,避免了在数值转换为字符串过程中所涉及的开销和精度损失。

不过这个技巧只有当数据将被另一个程序按顺序读取时才能使用。

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 );

buffer:保存数据的内存位置的指针

size: 缓冲区中每个元素的字节数

count:读取或写入的元素数

stream:读取或写入的流

7)刷新和定位函数

刷新:

int fflush("FILE *stream ");//立即写入

定位:

long ftell(FILE *stream );//返回当前下一个读取或写入的位置距离文件开始位置的偏移量。

int fseek(FILE *stream, long offset, int from );

from:定位文件的位置。SEEK_SET 流的开始位置,常与ftell的返回值offset一起使用。SEEK_CUR ,SEEK_END分别代表文件的当前位置和末尾。

重置:

void rewind(FILE *stream );//将读写指针设置为起始位置

8)改变缓冲的方式

void setbuf(FILE *stream,char *buf);

int setvbuf(FILE *stream,char *buf, int mode, size_t size );

9)流错误报告

int feof(FILE *stream);

int ferror(FILE *stream );

void clearerr(FILE *stream);

如果流处于文件尾,feof函数返回真。这个状态可以通过对流执行fseek,rewin,fsetpos函数来清楚。

ferror函数报告流的错误状态,如果出现任何读写错误报告就返回真。最后,clearerr函数对所有指定流的错误标志进行重置。

10)临时文件

程序运行是创建,程序结束后就将文件删除。

FILE *tmpfile(void);//这个函数创建了一个文件,当文件被关闭或程序终止时就删除这个文件。

文件以 wb+ 的模式打开,这使它可用于二进制和文本数据。

char *tmpnam(char *name);//临时文件的命名

11)文件操作函数

int remove(char const *filename );

int rename(char const *oldname,char const *newname );

注意:执行成功返回0,失败返回非0。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐