【C语言第十六回合】:文件函数大锅饭

来源:互联网 发布:12306购票软件下载 编辑:程序博客网 时间:2024/06/11 00:42

【C语言第十六回合】:文件函数大锅饭 


【学习目标】

 

1.        fprintf和fscanf

2.        fgets和fputs

3.        fseek和ftell

 

A:fprintfscanf的使用

( 1 ):fprint

 按照给定的格式输入文件流中。

 函数原型:intfprintf ( FILE * stream, const char * format, ... ); 

 [程序]

#include <stdio.h>#include <stdlib.h>  //for exit() int main( void ){         charstr[]= "www.codingit.howbbs.com";         FILE*pfile = NULL ;                 pfile=fopen( "test.txt", "w" ); //打开文件,并指向文件首地址         if(pfile== NULL )  //检测指针获取地址         {              perror( "Cannot open thisfile\n" );                                        exit( 1 );         }                 fprintf(pfile, "%s", str );                 fclose(pfile ); //关闭文件指针           return 0; }


在当前目录下的test.txt中有如下内容:

 www.codingit.howbbs.com


( 2 )fscanf的使用

  按照给定的格式从文件流中读取数据.

  函数原型:intfscanf ( FILE * stream, const char * format, ... );

[程序]

#include <stdio.h>#include <stdlib.h>  //for exit() int main( void ){         charstr[ 100 ];         FILE*pfile = NULL ;                 pfile=fopen( "test.txt", "r" ); //打开文件,并指向文件首地址         if(pfile== NULL )  //检测指针获取地址         {              perror( "Cannot open thisfile\n" );                                        exit( 1 );         }                 fscanf(pfile, "%s", str );                 printf("读取的内容为:%s\n", str );                         fclose(pfile ); //关闭文件指针           return 0; }


运行结果:

读取的内容为: www.codingit.howbbs.com

 

( 3 )fprintf和fscanf一起使用

 

//综合的fprintf和fscanf的使用#include <stdio.h>#include <stdlib.h>  //for exit() int main( void ){         //注意字符数组的大小!!!超过范围会有错误!!!         charstring[ 1000 ];         charstr[ 1000 ]= "www.blog.csdn.net/mirrorsbeyourself";         FILE*pfile = NULL ;                 pfile=fopen( "test.txt", "a+" ); //打开文件         if(pfile== NULL )  //检测指针获取地址         {              perror( "Cannot open thisfile\n" );                                        exit( 1 );         }         //再写入 一些数据         fprintf(pfile, "%s", str );                 //把文件指针指向文件的首地址         rewind(pfile );          //把文件中的         fscanf(pfile, "%s", string );                 printf("读取的内容为:" );         printf("%s\n", string );           fclose( pfile ); //关闭文件指针           return 0; }


运行结果:

 

B:fgetsfputs的使用

 

( 1 )fgets的使用

   从文件流中读取数据

  函数原型:char * fgets ( char * str, int num, FILE * stream );

[ 程序 ]

#include <stdio.h>#include <stdlib.h>  // for exit int main( void ){         FILE*pfile= NULL;         charstr[ 100 ];  //注意,只能存100个字符                 pfile=fopen( "test.txt", "r" );         if(pfile== NULL )         {                   perror("Cannot open this file\n" );                                     exit(1 );         }                 fgets(str, 100, pfile );         printf("成功读取文件的内容" );                 printf("文件内容为: " );         puts(str ); //显示str中的内容                             return0;} 

运行结果:

 

( 2 )fputs的使用

   向文件流中输入数据

  函数原型:intfputs ( const char * str, FILE * stream );

[ 程序 ]

#include <stdio.h>#include <stdlib.h>  // for exit() int main( void ){         FILE*pfile= NULL;         char*str= "http://codingit.howbbs.com/";                 pfile=fopen( "test.txt", "w" );         if(pfile== NULL )         {                   perror("Cannot open this file\n" );                                     exit(1 );         }                 fputs(str, pfile );                 printf("成功向文件输入数据\n" );                 fclose(pfile );                         return0;}

运行结果:

 

C:fseekftell的使用

 ( 1 )fseek的使用

   返回文件位置的索引

   函数原型:intfseek ( FILE * stream, long int offset, int origin );

a.  stream:文本文件或二进制文件。

b.  offset:

(1)             二进制文件:字节偏移量,从origin(起始地址)的数量。

(2)             文本文件:要么零,或取文件指针返回一个值。

c.  origin:

(origin)起始地址常量

参考位子

SEEK_SET

首地址

SEEK_CUR

当前地址

SEEK_END

位地址

[程序]

//fseek函数的使用实例#include <stdio.h>#include <stdlib.h>  // for exit() int main( void ){         FILE*pfile= NULL;         char  str[ 100 ];                 pfile=fopen( "test.txt", "r" );         if(pfile== NULL )         {                   perror("Cannot open this file\n" );                                     exit(1 );         }                 //origin==SEEK_SET, offset= 0         fseek(pfile, 0, SEEK_SET );         //从当前开始获取数据         fgets(str, 100, pfile );         printf("SEEK_SET( 0 ): %s\n", str );                 //使指针指回首地址         rewind(pfile );                   //origin=SEEK_CUR, offset= 7 (向右偏移量为7)         fseek(pfile, 7, SEEK_CUR );         //从当前开始获取数据         fgets(str, 100, pfile );         printf("SEEK_CUR( 7 ): %s\n", str );                 //使指针指会首地址         rewind(pfile );                 //origin=SEEK_END offset= -20(向左偏移20)         fseek(pfile, -20, SEEK_END );         //从当前开始获取数据         fgets(str, 100, pfile );         printf("SEEK_END( -20 ): %s\n", str );         fclose( pfile );          return0;} 


运行结果:

 

( 2 )ftell的使用

  函数原型:long intftell ( FILE * stream );

  作用:求文件首地址当前位置的字符个数。

[程序]

#include <stdio.h>#include <stdlib.h>  //for exit(), malloc( ) int main( void ){         FILE*pfile= NULL;         char*str= NULL;         intnum= 0;                 pfile=fopen( "test.txt", "r" );         if(pfile== NULL ) //检测         {             perror( "Cannot open this file\n");                                     exit(1 );           }                 //把指针指向文件的位地址         fseek(pfile, 0, SEEK_END );                 num=ftell( pfile );                 printf("文件中有%d个字符\n", num );                 str=( char *)malloc( ( num+ 1 )* sizeof( char ) );         if(str== NULL ) //检测         {                   perror("内存分配失败\n" );                                     exit(1 );         }                   //重新把指针指向文件首地址          rewind( pfile );                   //获取文件中的内容         fgets(str, num+ 1, pfile );                 //输出内容         printf("文件中的数据为:%s\n", str );                 fclose(pfile );                 return0;}


运行结果:

 

D:rewind函数的使用

   原型:voidrewind ( FILE * stream );

   作用:把文件指针指向文件的首地址(具体情况看上面程序)

E:fflush的使用

   原型:int fflush( FILE * stream );

   作用:刷新缓冲区。

调用fflush函数可以将缓存区中任何威胁的数据发送到有pfile指定的文件中去。如果pfile是空指针,将刷新掉搜有的输出缓冲。对一个输入流使用fflush函数的效果没有定义。只要最近一次使用流不是输入操作,就可以读一个更新流使用这个函数。

 

特别注意:要了解更多相关知识,请到www.cplusplus.com查找,谢谢

 

【指尖的微笑】错误在所难免,希望得到大家的指正^-^

LearnCoding(http://it.bangedushuren.cn/)原创,转载请注明

0 0