关于c语言输出格式的。。对文件的输入输出。。。看看我的程序哪里错了

标准C语言的输入输出流(i/o)方法详解 - 程序猴 - 博客园
随笔 - 122, 文章 - 1, 评论 - 35, 引用 - 0
-&详细说明
标准 C I/O
#include &stdio.h&
void clearerr( FILE *stream );
clearerr函数重置错误标记和给出的流的EOF指针. 当发生错误时,你可以使用判断实际上发生了何种错误.
相关主题: , , 和.
#include &stdio.h&
int fclose( FILE *stream );
函数fclose()关闭给出的文件流, 释放已关联到流的所有缓冲区. fclose()执行成功时返回0,否则返回EOF.
相关主题: , , 和.
#include &stdio.h&
int feof( FILE *stream );
函数feof()在到达给出的文件流的文件尾时返回一个非零值.
相关主题: , , , 和 .
#include &stdio.h&
int ferror( FILE *stream );
ferror()函数检查stream(流)中的错误, 如果没发生错误返回0,否则返回非零. 如果发生错误, 使用检测发生什么错误.
相关主题: , , ,
#include &stdio.h&
int fflush( FILE *stream );
如果给出的文件流是一个输出流,那么fflush()把输出到缓冲区的内容写入文件. 如果给出的文件流是输入类型的,那么fflush()会清除输入缓冲区. fflush()在调试时很实用,特别是对于在程序中输出到屏幕前发生错误片段时. 直接调用 fflush( STDOUT )输出可以保证你的调试输出可以在正确的时间输出.
printf( "Before first call\n" );
fflush( STDOUT );
shady_function();
printf( "Before second call\n" );
fflush( STDOUT );
dangerous_dereference();
相关主题: , , , , , 和.
#include &stdio.h&
int fgetc( FILE *stream );
fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF.
相关主题: , , , 和.
#include &stdio.h&
int fgetpos( FILE *stream, fpos_t *position );
fgetpos()函数保存给出的文件流(stream)的位置指针到给出的位置变量(position)中. position变量是fpos_t类型的(它在stdio.h中定义)并且是可以控制在FILE中每个可能的位置对象. fgetpos()执行成功时返回0,失败时返回一个非零值.
相关主题: , 和 .
#include &stdio.h&
char *fgets( char *str, int num, FILE *stream );
函数fgets()从给出的文件流中读取[num - 1]个字符并且把它们转储到str(字符串)中. fgets()在到达行末时停止,在这种情况下,str(字符串)将会被一个新行符结束. 如果fgets()达到[num - 1]个字符或者遇到EOF, str(字符串)将会以null结束.fgets()成功时返回str(字符串),失败时返回NULL.
#include &stdio.h&
FILE *fopen( const char *fname, const char *mode );
fopen()函数打开由fname(文件名)指定的文件, 并返回一个关联该文件的流.如果发生错误, fopen()返回NULL. mode(方式)是用于决定文件的用途(例如 用于输入,输出,等等)
Mode(方式)
打开一个用于读取的文本文件
创建一个用于写入的文本文件
附加到一个文本文件
打开一个用于读取的二进制文件
创建一个用于写入的二进制文件
附加到一个二进制文件
打开一个用于读/写的文本文件
创建一个用于读/写的文本文件
打开一个用于读/写的文本文件
打开一个用于读/写的二进制文件
创建一个用于读/写的二进制文件
打开一个用于读/写的二进制文件
FILE *input = fopen( "stuff", "r" );
ch = getc( input );
#include &stdio.h&
int fprintf( FILE *stream, const char *format, ... );
fprintf()函数根据指定的format(格式)(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.
char name[20] = "Mary";
out = fopen( "output.txt", "w" );
if( out != NULL )
fprintf( out, "Hello %s\n", name );
#include &stdio.h&
int fputc( int ch, FILE *stream );
函数fputc()把给出的字符ch写到给出的输出流. 返回值是字符, 发生错误时返回值是EOF.
相关主题: , , , , 和.
#include &stdio.h&
int fputs( const char *str, FILE *stream );
fputs()函数把str(字符串)指向的字符写到给出的输出流. 成功时返回非负值, 失败时返回EOF.
相关主题: , , , , 和.
#include &stdio.h&
int fread( void *buffer, size_t size, size_t num, FILE *stream );
函数fread()读取[num]个对象(每个对象大小为size(大小)指定的字节数),并把它们替换到由buffer(缓冲区)指定的数组. 数据来自给出的输入流. 函数的返回值是读取的内容数量...
使用或判断到底发生哪个错误.
相关主题: , ,, 和.
#include &stdio.h&
FILE *freopen( const char *fname, const char *mode, FILE *stream );
freopen()函数常用于再分配一个以存在的流给一个不同的文件和方式(mode).在调用本函数后,给出的文件流将会用mode(方式)指定的访问模式引用fname(文件名). freopen()的返回值是新的文件流,发生错误时返回NULL.
#include &stdio.h&
int fscanf( FILE *stream, const char *format, ... );
函数fscanf()以的执行方式从给出的文件流中读取数据. fscanf()的返回值是事实上已赋值的变量的数,如果未进行任何分配时返回EOF.
#include &stdio.h&
int fseek( FILE *stream, long offset, int origin );
函数fseek()为给出的流设置位置数据. origin的值应该是下列值其中之一(在stdio.h中定义):
从文件的开始处开始搜索
从当前位置开始搜索
从文件的结束处开始搜索
fseek()成功时返回0,失败时返回非零. 你可以使用fseek()移动超过一个文件,但是不能在开始处之前. 使用fseek()清除关联到流的EOF标记.
相关主题: , , , 和 .
#include &stdio.h&
int fsetpos( FILE *stream, const fpos_t *position );
fsetpos()函数把给出的流的位置指针移到由position对象指定的位置. fpos_t是在stdio.h中定义的. fsetpos()执行成功返回0,失败时返回非零.
相关主题: , 和 .
#include &stdio.h&
long ftell( FILE *stream );
ftell()函数返回stream(流)当前的文件位置,如果发生错误返回-1.
相关主题: 和 .
#include &stdio.h&
int fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
fwrite()函数从数组buffer(缓冲区)中, 写count个大小为size(大小)的对象到stream(流)指定的流. 返回值是已写的对象的数量.
相关主题: , , 和 .
#include &stdio.h&
int getc( FILE *stream );
getc()函数从stream(流)获取并返回下一个字符,如果到达文件尾返回EOF. getc()和fgetc()是一样的. 例如:
FILE *input = fopen( "stuff", "r" );
ch = getc( input );
while( ch != EOF ) {
printf( "%c", ch );
ch = getc( input );
相关主题: , , 和 .
#include &stdio.h&
int getchar( void );
getchar()函数从STDIN(标准输入)获取并返回下一个字符,如果到达文件尾返回EOF.
相关主题: , , 和 .
#include &stdio.h&
char *gets( char *str );
gets()函数从STDIN(标准输入)读取字符并把它们加载到str(字符串)里,直到遇到新行(\n)或到达EOF. 新行字符翻译为一个null中断符. gets()的返回值是读入的字符串,如果错误返回NULL.
相关主题: , ,和 .
#include &stdio.h&
void perror( const char *str );
perror()函数打印str(字符串)和一个相应的执行定义的错误消息到全局变量errno中.
#include &stdio.h&
int printf( const char *format, ... );
printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中.
字符串format(格式)由两类项目组成 - 显示到屏幕上的字符和定义printf()显示的其它参数. 基本上, 你可以指定一个包含文本在内的format(格式)字符串,也可以是映射到printf()其它参数的"特殊"字符. 例如本代码
char name[20] = "Bob";
int age = 21;
printf( "Hello %s, you are %d years old\n", name, age );
显示下列输出:
Hello Bob, you are 21 years old
%s 表示, "在这里插入首个参数,一个字符串." %d 表示第二个参数(一个整数)应该放置在那里. 不同的"%-codes"表示不同的变量类型, 也可以限制变量的长度.
带符号整数
带符号整数
科学计数法, 使用小写"e"
科学计数法, 使用大写"E"
使用%e或%f中较短的一个
使用%E或%f中较短的一个
无符号整数
无符号十六进制数, 用小写字母
无符号十六进制数, 用大写字母
参数应该是一个指向一个整数的指针 指向的是字符数放置的位置
一个'%'符号
一个位于一个%和格式化命令间的整数担当着一个最小字段宽度说明符,并且加上足够多的空格或0使输出足够长. 如果你想填充0,在最小字段宽度说明符前放置0. 你可以使用一个精度修饰符,它可以根据使用的格式代码而有不同的含义.
用%e, %E和 %f,精度修饰符让你指定想要的小数位数. 例如,
将会至少显示12位数字,并带有6位小数的浮点数.
用%g和 %G, 精度修饰符决定显示的有效数的位数最大值.
用%s,精度修饰符简单的表示一个最大的最大长度, 以补充句点前的最小字段长度.
所有的printf()的输出都是右对齐的,除非你在%符号后放置了负号. 例如,
将会显示12位字符,4位小数位的浮点数并且左对齐. 你可以修改带字母l和h%d, %i, %o, %u和 %x 等类型说明符指定长型和短型数据类型 (例如 %hd 表示一个短整数). %e, %f和 %g 类型说明符,可以在它们前面放置l指出跟随的是一个double. %g, %f和 %e 类型说明符可以置于字符'#'前保证出现小数点, 即使没有小数位. 带%x类型说明符的'#'字符的使用, 表示显示十六进制数时应该带'0x'前缀. 带%o类型说明符的'#'字符的使用, 表示显示八进制数时应该带一个'0'前缀.
你可以在输出字符串中包含 .
printf()的返回值是打印的字符数,如果发生错误则返回一个负值.
相关主题: 和 .
#include &stdio.h&
int putc( int ch, FILE *stream );
putc()函数把字符ch写到stream(流)中. 返回值是写入的字符, 发生错误时返回EOF. 例如:
input = fopen( "temp.cpp", "r" );
ch = getc( input );
while( ch != EOF ) {
printf( "%c", ch );
ch = getc( input );
显示"temp.cpp"的内容到屏幕.
相关主题: , , 和 .
#include &stdio.h&
int putchar( int ch );
putchar()函数把ch写到STDOUT(标准输出). 代码
putchar( ch );
putc( ch, STDOUT );
putchar()的返回值是被写的字符, 发生错误时返回EOF.
#include &stdio.h&
int puts( char *str );
函数puts()把str(字符串)写到STDOUT(标准输出)上. puts() 成功时返回非负值, 失败时返回EOF.
相关主题: , 和 .
#include &stdio.h&
int remove( const char *fname );
remove()函数删除由fname(文件名)指定的文件. remove()成功时返回0,如果发生错误返回非零.
#include &stdio.h&
int rename( const char *oldfname, const char *newfname );
函数rename()更改文件oldfname的名称为newfname. rename()成功时返回0,错误时返回非零.
#include &stdio.h&
void rewind( FILE *stream );
函数rewind()把文件指针移到由stream(流)指定的开始处, 同时清除和流相关的错误和EOF标记.
#include &stdio.h&
int scanf( const char *format, ... );
scanf()函数根据由format(格式)指定的格式从stdin(标准输入)读取,并保存数据到其它参数. 它和有点类似. format(格式)字符串由控制字符,空白字符和非空白字符组成. 控制字符以一个%符号开始,如下:
一个单一的字符
一个十进制整数
%e, %f, %g
一个浮点数
一个八进制数
一个字符串
一个十六进制数
一个等于读取字符数量的整数
一个无符号整数
一个字符集
一个精度符号
scanf()读取匹配format(格式)字符串的输入. 当读取到一个控制字符, 它把值放置到下一个变量. 空白(tabs, 空格等等)会跳过. 非空白字符和输入匹配, 然后丢弃. 如果是一个在%符号和控制符间的数量, 那么只有指定数量的字符转换到变量中. 如果scanf()遇到一个字符集(用%[]控制字符表示), 那么在括号中的任意字符都会读取到变量中. scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF.
相关主题: 和 .
#include &stdio.h&
void setbuf( FILE *stream, char *buffer );
setbuf()函数设置stream(流)使用buffer(缓冲区),如果buffer(缓冲区)是null,关闭缓冲. 如果使用非标准缓冲尺寸, 它应该由BUFSIZ字符决定长度.
相关主题: , , ,
#include &stdio.h&
int setvbuf( FILE *stream, char *buffer, int mode, size_t size );
函数setvbuf()设置用于stream(流)的缓冲区到buffer(缓冲区),其大小为size(大小). mode(方式)可以是:
_IOFBF, 表示完全缓冲
_IOLBF, 表示线缓冲
_IONBF, 表示无缓存
相关主题: ,
#include &stdio.h&
int sprintf( char *buffer, const char *format, ... );
sprintf()函数和类似, 只是把输出发送到buffer(缓冲区)中.返回值是写入的字符数量. 例如:
char string[50];
int file_number = 0;
sprintf( string, "file.%d", file_number );
file_number++;
output_file = fopen( string, "w" );
相关主题: , ,
#include &stdio.h&
int sscanf( const char *buffer, const char *format, ... );
函数sscanf()和类似, 只是输入从buffer(缓冲区)中读取.
相关主题: , ,
#include &stdio.h&
FILE *tmpfile( void );
函数tempfile()用一个独特的文件名打开一个临时文件,并返回一个到该文件的指针.如果发生错误则返回null.
相关主题: ,
#include &stdio.h&
char *tmpnam( char *name );
tmpnam()函数创建一个独特的文件名并保存在name中. tmpnam()最多可以调用TMP_MAX指定的次数.
相关主题: ,
#include &stdio.h&
int ungetc( int ch, FILE *stream );
函数ungetc()把字符ch放回到stream(流)中.
相关主题: ,
vprintf, vfprintf和 vsprintf
#include &stdarg.h&
#include &stdio.h&
int vprintf( char *format, va_list arg_ptr );
int vfprintf( FILE *stream, const char *format, va_list arg_ptr );
int vsprintf( char *buffer, char *format, va_list arg_ptr );
这些函数和非常相似, 和 的不同在于参数列表是一个指向一系列参数的指针. va_list在STDARG.H中定义,并且也可以被使用. 例如:
void error( char *fmt, ... ) {
va_start( args, fmt );
fprintf( stderr, "Error: " );
vfprintf( stderr, fmt, args );
fprintf( stderr, "\n" );
va_end( args );
exit( 1 );C语言对文件的输入输出_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
&&¥3.00
喜欢此文档的还喜欢
C语言对文件的输入输出
面​向​过​程​程​序​设​计​语​言
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:817.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢世外诗情淡,山中道味真。 此心如暮石,何处着些尘?
【】【】【】【】【】【】【】【】【】【】
您现在的位置:
&&>>&&>>&&>>&正文
C语言基础教程(六)文件的输入输出函数
作者:&&&&厚朴教育来源:&&&&点击数:2495&&&&更新时间:7/23/2011
&& &&& 键盘、显示器、打印机、磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成。而在编程时使用最多的要算是磁盘文件, 因此本节主要以磁盘文件为主, 详细介绍Turbo C2.0提供的文件操作函数, 当然这些对文件的操作函数也适合于非磁盘文件的情况。&&&&&&& 另外, Turbo C2.0提供了两类关于文件的函数。一类称做标准文件函数也称缓冲型文件函数, 这是ANSI标准定义的函数; 另一类叫非标准文件函数, 也称非缓冲型文件函数。这类函数最早公用于UNIX操作系统, 但现在MS-DOS3.0 以上版本的操作系统也可以使用。下面分别进行介绍。&&&&&&&&& 一、标准文件函数&&&&&&& 标准文件函数主要包括文件的打开、关闭、读和写等函数。不象BASIC 、FORTRAN语方有顺序文件和随机文件之分,&& 在打开时就应按不同的方式确定。Turbo C2.0并不区分这两种文件, 但提供了两组函数, 即顺序读写函数和随机读写函数。&&&&&&& 1. 文件的打开和关闭&&&&&&& 任何一个文件在使用之前和使用之后, 必须要进行打开和关闭, 这是因为操作系统对于同时打开的文件数目是有限制的, DOS操作系统中,&&& 可以在DEVICE.SYS中定义允许同时打开的文件数n(用files=n定义)。其中n 为可同时打开的文件数, 一般n&=20。因此在使用文件前应打开文件, 才可对其中的信息进行存取。用完之后需要关闭, 否则将会出现一些意想不到的错误。Turbo C2.0提供了打开和关闭文件的函数。
&&&&&& 1.1 fopen()函数&&&&&&& fopen函数用于打开文件, 其调用格式为:&
&&&&&&& FILE *fopen(char *filename, *type);&&&&&&& 在介绍这个函数之;前, 先了解一下下面的知识。&&&&&&& (1) 流(stream)和文件(file)&&&&&&& 流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为"流", 而将具体的实际设备叫做文件。流是一个逻辑设备, 具有相同的行为。因此, 用来进行磁盘文件写的函数也同样可以用来进行打印机的写入。在Turbo C2.0中有两种性质的流:&& 文字流( textstream)和二进制(binary stream)。对磁盘来说就是文本文件和二进制文件。本软件为了便于让读者易理解Turbo C2.0语言而没有对流和文件作特别区分。&&&&&&& (2) 文件指针FILE&&&&&&& 实际上FILE是一个新的数据类型。它是Turbo C2.0的基本数据类型的集合,称之为结构指针。有关结构的概念将在第四节中详细介绍, 这里只要将FILE理解为一个包括了文件管理有关信息的数据结构, 即在打开文件时必须先定义一个文件指针。&&&&&&& (3) 以后介绍的函数调用格式将直接写出形式参数的数据类型和函数返回值的数据类型。例如: 上面打开文件的函数, 返回一个文件指针, 其中形式参数有两个, 均为字符型变量(字符串数组或字符串指针)。本软件不再对函数的调用格式作详细说明。&&&&&&& 现在再来看打开文件函数的用法。&&&&&&& fopen()函数中第一个形式参数表示文件名, 可以包含路径和文件名两部分。&&&&&&& 如:
&&&&&& "B:TEST.DAT"&&&&&&& "C:\\TC\\TEST.DAT"&&&&&&& 如果将路径写成"C:\TC\TEST.DAT"是不正确的, 这一点要特别注意。&&&&&&& 第二个形式参数表示打开文件的类型。关于文件类型的规定参见下表。
打开文字文件只读
创建文字文件只写
增补, 如果文件不存在则创建一个
打开一个文字文件读/写
创建一个文字文件读/写
打开或创建一个文件增补
二进制文件(可以和上面每一项合用)
文这文件(默认项)&&&&&& 如果要打开一个CCDOS子目录中, 文件名为CLIB的二进制文件, 可写成:&
&&&&&&& fopen("c:\\ccdos\\clib", "rb");&&&&&&& 如果成功的打开一个文件, fopen()函数返回文件指针,&& 否则返回空指针(NULL)。由此可判断文件打开是否成功。&&&&&& 1.2 fclose()函数&&&&&&& fclose()函数用来关闭一个由fopen()函数打开的文件 , 其调用格式为:
&&&&&&& int fclose(FILE *stream);&&&&&&& 该函数返回一个整型数。当文件关闭成功时, 返回0, 否则返回一个非零值。可以根据函数的返回值判断文件是否关闭成功。&&&&&&& 例1:
&&&&& #iclude&stdio.h& &&&& main() &&&& { &&&&&&&&& FILE *&&&&&&&&&&&&&&& /*定义一个文件指针*/ &&&&&&&&& &&&&&&&&& fp=fopen("CLIB", "rb");& /*打开当前目录名为CLIB的文件只读*/ &&&&&&&&& if(fp==NULL)&&&&&&&&&&&& /*判断文件是否打开成功*/ &&&&&&&&&&&& puts("File open error");/*提示打开不成功*/ &&&&&&&&& i=fclose(fp);&&&&&&&&&&& /*关闭打开的文件*/ &&&&&&&&& if(i==0)&&&&&&&&&&&&&&&& /*判断文件是否关闭成功*/ &&&&&&&&&&& printf("O,K");&&&&&&&& /*提示关闭成功*/ &&&&&&&&& else &&&&&&&&&&& puts("File close error");/*提示关闭不成功*/ &&&& }&&&&&&& 2. 有关文件操作的函数&&&&&&& 本节所讲的文件读写函数均是指顺序读写, 即读写了一条信息后, 指针自动加1。下面分别介绍写操作函数和读操作函数。&&&&&&& 2.1 文件的顺序写函数&&&&&&& fprintf()、fputs()和fputc()函数&&&&&&& 函数fprintf()、fputs()和fputc()均为文件的顺序写操作函数,& 其调用格式如下:&
&&&&&& int fprintf(FILE *stream, char *format, &variable-list&);&&&&&&& int fputs(char *string, FILE *steam);&&&&&&& int fputc(int ch, FILE *steam);&&&&&&& 上述三个函数的返回值均为整型量。fprintf() 函数的返回值为实际写入文件中的字罕个数(字节数)。如果写错误, 则返回一个负数, fputs()函数返回0时表明将string指针所指的字符串写入文件中的操作成功, 返回非0时,& 表明写操作失败。fputc()函数返回一个向文件所写字符的值, 此时写操作成功,& 否则返回EOF(文件结束结束其值为-1, 在stdio.h中定义)表示写操作错误。&&&&&&& fprintf( ) 函数中格式化的规定与printf( ) 函数相同,&& 所不同的只是fprintf()函数是向文件中写入。而printf()是向屏幕输出。&&&&&&& 下面介绍一个例子, 运行后产后一个test.dat的文件。&&&&&&& 例2:
&&&&& #include&stdio.h& &&&& main() &&&& { &&&&&&&&& char *s="That's good news");& /*定义字符串指针并初始化*/ &&&&&&&&& int i=617;&&&&&&&&&&&&&&&&&&& /*定义整型变量并初始化*/ &&&&&&&&& FILE *&&&&&&&&&&&&&&&&&&&& /*定义文件指针*/ &&&&&&&&& fp=fopne("test.dat", "w");&&& /*建立一个文字文件只写*/ &&&&&&&&& fputs("Your score of TOEFLis", fp);/*向所建文件写入一串字符*/ &&&&&&&&& fputc(':', fp);&&&&&&&&&&&&&& /*向所建文件写冒号:*/ &&&&&&&&& fprintf(fp, "%d\n", i);&&&&&& /*向所建文件写一整型数*/ &&&&&&&&& fprintf(fp, "%s", s);&&&&&&&& /*向所建文件写一字符串*/ &&&&&&&&& fclose(fp);&&&&&&&&&&&&&&&&&& /*关闭文件*/ &&&& }&&&&&&& 用DOS的TYPE命令显示TEST.DAT的内容如下所示:&&&&&&& 屏幕显示:
&&&&&& Your score of TOEFL is: 617&&&&&&& That's good news &&&&&& 2.2 文件的顺序读操作函数&&&&&&& fscanf()、fgets()和fgetc()函数&&&&&&& 函数fscanf()、fgets()和fgetc()均为文件的顺序读操作函数, 其调用格式&&&&&&& 如下:&
&&&&&& int fscanf(FILE *stream, char *format, &address-list&);&&&&&&& char fgets(char *string, int n, FILE *steam);&&&&&&& int fgetc(FILE *steam);&&&&&&& fscanf()函数的用法与scanf()函数相似,&& 只是它是从文件中读到信息。fscanf()函数的返回值为EOF(即-1), 表明读错误, 否则读数据成功。fgets()函数从文件中读取至多n-1个字符(n用来指定字符数), 并把它们放入string指向的字符串中, 在读入之后自动向字符串未尾加一个空字符, 读成功返回string指针,失败返回一个空指针。fgetc()函数返回文件当前位置的一个字符,& 读错误时返回EOF。&&&&&&& 下面程序读取例11产生的test.dat文件, 并将读出的结果显示在屏幕上。&&&&&&&& 例3:&
&&&&& #include&stdio.h& &&&& main() &&&& { &&&&&&&&& char *s, m[20]; &&&&&&&&& &&&&&&&&& FILE& * &&&&&&&&& fp=fopen("test.dat", "r");&&& /*打开文字文件只读*/ &&&&&&&&& fgets(s, 24, fp);&&&&&&&&&&&& /*从文件中读取23个字符*/ &&&&&&&&& printf("%s", s);&&&&&&&&&&&&& /*输出所读的字符串*/ &&&&&&&&& fscanf(fp, "%d", &i);&&&&&&&& /*读取整型数*/ &&&&&&&&& printf("%d", i);&&&&&&&&&&&&& /*输出所读整型数*/ &&&&&&&&& putchar(fgetc(fp));&&&&&&&&&& /*读取一个字符同时输出*/ &&&&&&&&& fgets(m, 17, fp);&&&&&&&&&&&& /*读取16个字符*/ &&&&&&&&& puts(m);&&&&&&&&&&&&&&&&&&&&& /*输出所读字符串*/ &&&&&&&&& fclose(fp);&&&&&&&&&&&&&&&&&& /*关闭文件*/ &&&&&&&&& getch();&&&&&&&&&&&&&&&&&&&&& /*等待任一键*/ &&&& }&&&&&&& 运行后屏幕显示:
&&&&&& Your score of TOEFL is: 617&&&&&&& That's good news&&&&&&& 如果将上例中fscanf(fp, "%d", &i)改为fscanf(fp, "%s", m),& 再将其后的输出语句改为printf("%s", m), 则可得出同样的结果。由此可见Turbo C2. 0中只要是读文字文件, 则不论是字符还是数字都将按其ASCII值处理。 另外还要说明的一点就是fscanf()函数读到空白符时, 便自动结束, 在使用时要特别注意。&&&&&&& 2.3 文件的随机读写&&&&&&& 有时用户想直接读取文件中间某处的信息, 若用文件的顺序读写必须从文件头开始直到要求的文件位置再读, 这显然不方便。Turbo C2.0提供了一组文件的随机读写函数, 即可以将文件位置指针定位在所要求读写的地方直接读写。&&&&&&& 文件的随机读写函数如下:&
&&&&&& int fseek (FILE *stream, long offset, int fromwhere);&&&&&&& int fread(void *buf, int size, int count, FILE *stream);&&&&&&& int fwrite(void *buf, int size, int count, FILE *stream);&&&&&&& long ftell(FILE *stream);&&&&&&& fseek()函数的作用是将文件的位置指针设置到从fromwhere开始的第offset字节的位置上, 其中fromwhere是下列几个宏定义之一:&
从文件开头
从文件指针的现行位置
从文件末尾&&&&&& offset是指文件位置指针从指定开始位置(fromwhere指出的位置)跳过的字节数。它是一个长整型量, 以支持大于64K字节的文件。fseek()函数一般用于对二进制文件进行操作。&&&&&&& 当fseek()函数返回0时表明操作成功, 返回非0表示失败。&&&&&&& 下面程序从二进制文件test_b.dat中读取第8个字节。&&&&&&& 例4:
&&&&& #include&stdio.h& &&&& main() &&&& { &&&&&&&&& FILE * &&&&&&&&& if((fp=fopen("test_b.dat", "rb"))==NULL) &&&&&&&&&&& { &&&&&&&&&&&&& printf("Can't open file"); &&&&&&&&&&&&& exit(1); &&&&&&&&&&& } &&&&&&&&& fseek(fp, 8. 1, SEEK_SET); &&&&&&&&& fgetc(fp); &&&&&&&&& fclose(fp); &&&& }&&&&&&& fread()函数是从文件中读count个字段, 每个字段长度为size个字节, 并把它们存放到buf指针所指的缓冲器中。&&&&&&& fwrite()函数是把buf指针所指的缓冲器中, 长度为size个字节的count个字段写到stream指向的文件中去。&&&&&&& 随着读和写字节数的增大, 文件位置指示器也增大, 读多少个字节, 文件位置指示器相应也跳过多少个字节。读写完毕函数返回所读和所写的字段个数。&&&&&&& ftell()函数返回文件位置指示器的当前值,& 这个值是指示器从文件头开始算起的字节数, 返回的数为长整型数, 当返回-1时, 表明出现错误。&&&&&&& 下面程序把一个浮点数组以二进制方式写入文件test_b.dat中。&&&&&&& 例5:
&&&&& #include &stdio.h& &&&& main() &&&& { &&&&&&&&& float f[6]={3.2, -4.34, 25.04, 0.1, 50.56, 80.5}; &&&&&&&&&&&&&&&&&&&&&&&& /*定义浮点数组并初始化*/ &&&&&&&&& &&&&&&&&& FILE * &&&&&&&&& fp=fopen("test_b.dat", "wb"); /*创建一个二进制文件只写*/ &&&&&&&&& fwrite(f, sizeof(float), 6, fp);/*将6个浮点数写入文件中*/ &&&&&&&&& fclose(fp);&&&&&&&&&&&&&&&&&& /*关闭文件*/ &&&& }&&&&&&& 下面例子从test_b.dat文件中读100个整型数, 并把它们放到dat数组中。&&&&&&& 例6:
&&&&& #include &stdio.h& &&&& main() &&&& { &&&&&&&&& FILE * &&&&&&&&& int dat[100]; &&&&&&&&& fp=fopen("test_b.dat", "rb");/*打开一个二进制文件只读*/ &&&&&&&&& if(fread(dat, sizeof(int), 100, fp)!=100) &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& /*判断是否读了100个数*/ &&&&&&&&&&& { &&&&&&&&&&&&&& if(feof(fp)) &&&&&&&&&&&&&&&& printf("End of file"); /*不到100个数文件结束*/ &&&&&&&&&&&&&& else &&&&&&&&&&&&&&&& printf("Read error");& /*读数错误*/ &&&&&&&&& fclose(fp);&&&&&&&&&&&&&&&&&& /*关闭文件*/ &&&& }&&&&&&& 注意:&&&&&&& 当用标准文件函数对文件进行读写操作时, 首先将所读写的内容放进缓冲区,即写函数只对输出缓冲区进行操作, 读函数只对输入缓冲区进行操作。例如向一个文件写入内容, 所写的内容将首先放在输出缓冲区中, 直到输出缓冲区存满或使用fclose()函数关闭文件时, 缓冲区的内容才会写入文件中。若无fclose()函数, 则不会向文件中存入所写的内容或写入的文件内容不全。有一个对缓冲区进行刷新的函数, 即fflush(), 其调用格式为:&
&&&&&&& int fflush(FILE *stream);&&&&&&& 该函数将输出缓冲区的内容实际写入文件中, 而将输入缓冲区的内容清除掉。
&&&&&&&2.4 feof()和rewind()函数&&&&&&& 这两个函数的调用格式为:
&&&&&& int feof(FILE *stream);&&&&&&& int rewind(FILE *stream);&&&&&&& feof()函数检测文件位置指示器是否到达了文件结尾,& 若是则返回一个非0值, 否则返回0。这个函数对二进制文件操作特别有用, 因为二进制文件中,& 文件结尾标志EOF也是一个合法的二进制数,& 只简单的检查读入字符的值来判断文件是否结束是不行的。如果那样的话, 可能会造成文件未结尾而被认为结尾, 所以就必须有feof()函数。&&&&&&& 下面的这条语句是常用的判断文件是否结束的方法。&
&&&&&& while(!feof(fp))&&&&&&& fgetc(fp);&&&&&&& while为循环语句, 将在下面介绍。&&&&&&& rewind()函数用于把文件位置指示器移到文件的起点处, 成功时返回0,& 否则, 返回非0值。&&&&&&& 二、非标准文件函数&&&&&&& 这类函数最早用于UNIX操作系统, ANSI标准未定义,&& 但有时也经常用到,DOS 3.0以上版本支持这些函数。它们的头文件为io.h。&&&&&&& 1. 文件的打开和关闭&&&&&&& 1.1 open()函数&&&&&&& open()函数的作用是打开文件, 其调用格式为:&
&&&&&&& int open(char *filename, int access);&&&&&&& 该函数表示按access的要求打开名为filename的文件, 返回值为文件描述字,其中access有两部分内容: 基本模式和修饰符, 两者用" "("或")方式连接。修饰符可以有多个, 但基本模式只能有一个。access的规定如下:
文件指针指向末尾
文件不存在时创建文件,&属性按基本模式属性
若文件存在, 将其长度缩为0, 属性不变
打开一个二进制文件
打开一个文字文件&&&&&& open()函数打开成功, 返回值就是文件描述字的值(非负值), 否则返回-1。&&&&&&& 1.2 close()函数&&&&&&& close()函数的作用是关闭由open()函数打开的文件, 其调用格式为:
&&&&&&&& int close(int handle);&&&&&&& 该函数关闭文件描述字handle相连的文件。&&&&&&& 2. 读写函数&&&&&&&&2.1&read()函数&&&&&&& read()函数的调用格式为:&
&&&&&&& int read(int handle, void *buf, int count);&&&&&&& read()函数从handle(文件描述字)相连的文件中, 读取count个字节放到buf所指的缓冲区中, 返回值为实际所读字节数, 返回-1表示出错。返回0 表示文件结束。&&&&&& 2.2 write()函数&&&&&&& write()函数的调用格式为:&
&&&&&&& int write(int handle, void *buf, int count);&&&&&&& write()函数把count个字节从buf指向的缓冲区写入与handle相连的文件中,返回值为实际写入的字节数。&&&&&&&&& 3. 随机定位函数&&&&&&&&3.1 lseek()函数&&&&&&& lseek()函数的调用格式为:&
&&&&&&& int lseek(int handle, long offset, int fromwhere);&&&&&&& 该函数对与handle相连的文件位置指针进行定位, 功能和用法与fseek() 函数相同。&&&&&&&&3.2 tell()函数&&&&&&& tell()函数的调用格式为:&
&&&&&&& long tell(int handle);&&&&&&& 该函数返回与handle相连的文件现生位置指针, 功能和用法与ftell()相同。
厚朴教育录入:李润志&&&&责任编辑:李润志&
上一个厚朴教育: 下一个厚朴教育:

我要回帖

更多关于 c语言字符串逆序输出 的文章

 

随机推荐