⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tc15.dat

📁 C++指令字典 一个方便的软件 用于C++指令的查询
💻 DAT
📖 第 1 页 / 共 2 页
字号:

#include "stdio.h"

main(int argc, char *argv[])

    { FILE *input, *output;      /* input:源文件指针, output:目标文件指针 */

       char ch;

       if(argc!=3)                   /*参数个数不对*/

           {  printf("the number of arguments not correct\n");

               printf("\n Usage:  可执行文件名  source-file  dest-file");

               exit(0);

            }

if ((fp=fopen(argv[1],"r"))==NULL)            /*打开源文件失败*/

        {  printf("can not open source file\n");

            exit(0);

         }

  if ((fp=fopen(argv[2],"w"))==NULL)   /*创建目标文件失败*/

       {  printf("can not create destination file\n");

           exit(0);

        }

  /*复制源文件到目标文件中*/

  for( ; (!feof(input)) ; ) fputc(fgetc(input),output); 

  fclose(input); fclose(output);                   /*关闭源文件和目标文件*/

}

                     [程序演示]

库函数feof():
        1)用法:int  feof(文件指针);
        2)功能:在执行读文件操作时,如果遇到文件尾,则函数返回逻辑真(1);否则,则返回逻辑假(0).feof()函数同时适用于ASCII码文件和二进制文件.
        例如,!feof(input))表示源文件(用于输入)未结束,循环继续.

12.3.2  读/写一个字符串──fgets()和fputs()

[案例12.4] 将键盘上输入的一个长度不超过80的字符串,以ASCII码形式存储到一个磁盘文件中;然后再输出到屏幕上.

/*案例代码文件名:AL12_4.C*/

/*参数:可执行文件名  要创建的磁盘文件名*/

#include "stdio.h"

main(int argc, char *argv[])

    { FILE *fp;

       char string[81];      /*字符数组用于暂存输入输出的字符串*/

       if(argc>2)            /*参数太多,提示 出错*/

          {  printf("Too many parameters…\n\n");

                  printf("Usage: 可执行文件名  filename\n");

              exit(0);

          }

if(argc= =1)                      /*缺磁盘文件名,提示输入*/

      { printf("Input the filename: ");

        gets(string);                  /*借用string暂存输入的文件名*/

        argv[1]=(char *)malloc(strlen(string)+1);/*给文件名参数申请内存空间*/

        strcpy(argv[1],string);/*复制文件名到形参中*/

      }

  if ((fp=fopen(argv[1],"w"))==NULL)    /*打开文件失败*/

      {  printf("can not open this file\n");

            exit(0);

      }

  /*从键盘上输入字符串,并存储到指定文件中*/

  printf("Input a string: "); gets(string);    /*从键盘上输入字符串*/

  fputs(string, fp);                                /*存储到指定文件*/

  fclose(fp);

    /*重新打开文件,读出其中的字符串,并输出到屏幕上*/

    if ((fp=fopen(argv[1],"r"))==NULL)           /*打开文件失败*/

         {  printf("can not open this file\n");

            exit(0);

         }

    fgets(string, strlen(string)+1, fp);                  /*从文件中读一个字符串*/

    printf("Output the string: "); puts(string);  /*将字符串输出到屏幕上*/

    fclose(fp);

  }

                                                         [程序演示]

        (1)为增强程序的可靠性,程序中对参数过多的情况,提示出错、并终止程序运行;而遗漏文件名时,提示用户输入.

        同时,为增强程序的人机交互性,凡是需要用户输入数据的地方,都设置提示输入的信息;凡是输出数据的地方,都设置输出说明信息.

(2) 库函数fputs()──向指定文件输出一个字符串

1)用法:int  fputs(字符串,文件指针);

其中“字符串”可以是一个字符串常量,或字符数组名,或字符指针变量名.

2)功能:向指定文件输出一个字符串,同时将读写位置指针向前移动strlength(字符串长度)个字节.如果输出成功,则函数返回值为0;否则,为非0值.

(3) 库函数fgets()──从文件中读一个字符串

 1)用法:char  *fgets(指针,串长度+1,文件指针);

 2)功能:从指定文件中读入一个字符串,存入“字符数组/指针”中,并在尾端自动加一个结束标志'\0';同时,将读写位置指针向前移动strlength(字符串长度)个字节.

 如果在读入规定长度之前遇到文件尾EOF或换行符,读入即结束.

12.3.3  读/写一个数据块──fread()和fwrite()

实际应用中,常常要求1次读/写1个数据块.为此,ANSI  C 标准设置了 fread( ) 和fwrite()函数.

 1.用法:

int  fread(void *buffer,int size,int count,FILE *fp);

int  fwrite(void *buffer,int size,int count,FILE *fp);

2.功能:

fread()──从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size* count个字节.

其中,buffer是存放读入数据的起始地址(即存放何处).

fwrite()──从buffer开始,一次输出size个字节,重复count次, 并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size* count个字节.

其中,buffer是要输出数据在内存中的起始地址(即从何处开始输出).

如果调用fread()或fwrite()成功,则函数返回值等于count.

fread()和fwrite()函数,一般用于二进制文件的处理.

12.3.4  对文件进行格式化读/写──fscanf()和fprintf()函数

  与scanf()和printf()函数的功能相似,区别在于:fscanf()和fprintf()函数的操作对象是指定文件,而scanf()和printf()函数的操作对象是标准输入(stdin)输出(stdout)文件.

  int  fscanf(文件指针,"格式符",输入变量首地址表);

  int  fprintf(文件指针,"格式符",输出参量表);

 例如,......

        int i=3; float f=9.80;

        ......

        fprintf(fp,"%2d,%6.2f", i, f);

         ......

 fprintf()函数的作用是,将变量i按%2d格式、变量f按%6.2f格式, 以逗号作分隔符,输出到fp所指向的文件中: 3,  9.80( 表示1个空格).

12.3.5  读/写函数的选用原则

从功能角度来说,fread()和fwrite()函数可以完成文件的任何数据读/写操作. 但为方便起见,依下列原则选用:

 1.读/写1个字符(或字节)数据时:选用fgetc()和fputc()函数.

 2.读/写1个字符串时:选用fgets()和fputs()函数.

 3.读/写1个(或多个)不含格式的数据时:选用fread()和fwrite()函数.

 4.读/写1个(或多个)含格式的数据时:选用fscanf()和fprintf()函数.

12.4   位置指针与文件定位

文件中有一个读写位置指针,指向当前的读写位置.每次读写1个(或1组)数据后,系统自动将位置指针移动到下一个读写位置上.
       如果想改变系统这种读写规律,可使用有关文件定位的函数.

 12.4.1  位置指针复位函数rewind()

 1.用法:int  rewind(文件指针);

 2.功能:使文件的位置指针返回到文件头.

 12.4.2  随机读写与fseek()函数

 对于流式文件,既可以顺序读写,也可随机读写,关键在于控制文件的位置指针.
        所谓顺序读写是指,读写完当前数据后,系统自动将文件的位置指针移动到下一个读写位置上.

所谓随机读写是指,读写完当前数据后,可通过调用fseek()函数,将位置指针移动到文件中任何一个地方.

 1.用法:int  fseek(文件指针,位移量,参照点);

 2.功能:将指定文件的位置指针,从参照点开始,移动指定的字节数.

(1)参照点:用0(文件头)、1(当前位置)和2(文件尾)表示.

在ANSI C标准中,还规定了下面的名字:

          SEEK_SET──文件头,

          SEEK_CUR──当前位置,

          SEEK_END──文件尾

(2)位移量:以参照点为起点,向前(当位移量>0时)或后(当位移量<0时)移动的字节数.在ANSI C标准中,要求位移量为long int型数据.

fseek()函数一般用于二进制文件.

12.4.3  返回文件当前位置的函数ftell()

由于文件的位置指针可以任意移动,也经常移动,往往容易迷失当前位置,ftell()就可以解决这个问题.

 1.用法:long  ftell(文件指针);

 2.功能:返回文件位置指针的当前位置(用相对于文件头的位移量表示).

 如果返回值为-1L,则表明调用出错.例如:

          offset=ftell(fp);

          if(offset= =-1L)printf(“ftell() error\n”);

12.5       出错检测

12.5.1  ferror()函数
       在调用输入输出库函数时,如果出错,除了函数返回值有所反映外,也可利用ferror()函数来检测.
         1.用法: int  ferror(文件指针); 

  2.功能:如果函数返回值为0,表示未出错;如果返回一个非0值,表示出错.
      (1)对同一文件,每次调用输入输出函数均产生一个新的ferror()函数值.因此在调用了输入输出函数后,应立即检测,否则出错信息会丢失.
       (2)在执行fopen()函数时,系统将ferror()的值自动置为0.

12.5.2  clearerr()函数

1.用法: void  clearerr(文件指针);

2.功能:将文件错误标志(即ferror()函数的值)和文件结束标志(即feof()函数的值)置为0. 
 对同一文件,只要出错就一直保留,直至遇到clearerr()函数或rewind()函数,或其它任何一个输入输出库函数.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -