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

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


【学习目标】

 

1.        fprintf和fscanf

2.        fgets和fputs

3.        fseek和ftell

 

A:fprintfscanf的使用

( 1 ):fprint

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

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

 [程序]

#include 
#include   //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 
#include   //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 
#include   //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; 
}


运行结果:

 【C语言第十六回合】:文件函数大锅饭_第1张图片

B:fgetsfputs的使用

 

( 1 )fgets的使用

   从文件流中读取数据

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

[ 程序 ]

#include 
#include   // 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 
#include   // 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语言第十六回合】:文件函数大锅饭_第2张图片

 

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 
#include   // 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 
#include   //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/)原创,转载请注明

你可能感兴趣的:(C语言基础入门)