C/C++常用IO函数

来源:互联网 发布:windows历代系统 编辑:程序博客网 时间:2024/05/22 22:45

       最近老在这方面吃亏,这次好好补一下。

C I/O

1.fopen、fclose、freopen、feof

      fopen:

      algorithm:

                 #include<stdio.h>

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

           fopen()函数打开由fname(文件名)指定的文件, 并返回一个关联该文件的流.如果发生错误, fopen()返回NULL.mode(方式)是用于决定文件的用途(例如 用于输入,输出,等等).

          Mode(方式)意义"r"打开一个用于读取的文本文件"w"创建一个用于写入的文本文件"a"附加到一个文本文件"rb"打开一个用于读取的二进制文件"wb"创建一个用于写入的二进制文件"ab"附加到一个二进制文件"r+"打开一个用于读/写的文本文件"w+"创建一个用于读/写的文本文件"a+"打开一个用于读/写的文本文件"rb+"打开一个用于读/写的二进制文件"wb+"创建一个用于读/写的二进制文件"ab+"打开一个用于读/写的二进制文件

示例:

    char ch;    FILE *input = fopen( "stuff", "r" );    ch = getc( input );
      

      fclose:

      algorithm:

               #include<stdio.h>

              int  fclose(FILE * stream);

         函数fclose()关闭给出的文件流, 释放已关联到流的所有缓冲区. fclose()执行成功时返回0,否则返回EOF.


      freopen

      algorithm:

              #include <stdio.h>

              FILE *freopen( const char *fname, const char *mode, FILE *stream );

        

实现重定向,把预定义的标准流文件stream定向到由fname指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。

示例:

       

#include <stdio.h> int main() {     int a,b;     freopen("debug\\in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取     freopen("debug\\out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中     while(scanf("%d %d",&a,&b)!=EOF)     printf("%d\n",a+b);     fclose(stdin);//关闭文件     fclose(stdout);//关闭文件     return 0; }

       feof:

       algorithm:

              #include <stdio.h>

              int feof( FILE *stream );

函数feof()在到达给出的文件流的文件尾时返回一个非零值.

2.fread、fwrite

     fread:

     algorithm:

              #include<stdio.h>

              int  fread(void * buffer,size_t size,size_t num,FILE * stream);

函数fread()读取 num个对象(每个对象大小为size(大小)指定的字节数),并把它们替换到由buffer(缓冲区)指定的数组. 数据来自给出的输入流. 函数的返回值是读取的内容数量...

     fwrite:

     algorithm:

             #include <stdio.h>

             int fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

fwrite()函数从数组buffer(缓冲区)中, 写count个大小为size(大小)的对象到stream(流)指定的流. 返回值是已写的对象的数量.

3.scanf、fscanf、sscanf、printf、fprintf、sprintf

     scanf

     algorithm:

              #include <stdio.h>

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

scanf()函数根据由format(格式)指定的格式从stdin(标准输入)读取,并保存数据到其它参数.format(格式)字符串由控制字符,空白字符和非空白字符组成. 控制字符以一个%符号开始,如下:

控制字符说明%c一个单一的字符%d一个十进制整数%i一个整数%e, %f, %g一个浮点数%o一个八进制数%s一个字符串%x一个十六进制数%p一个指针%n一个等于读取字符数量的整数%u一个无符号整数%[]一个字符集%%一个精度符号scanf()读取匹配format(格式)字符串的输入. 当读取到一个控制字符, 它把值放置到下一个变量. 空白(tabs, 空格等等)会跳过. 非空白字符和输入匹配, 然后丢弃. 如果是一个在%符号和控制符间的数量, 那么只有指定数量的字符转换到变量中. 如果scanf()遇到一个字符集(用%[]控制字符表示), 那么在括号中的任意字符都会读取到变量中. scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF.


     fscanf:

     algorithm:

             #include <stdio.h>

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

函数fscanf()以scanf()的执行方式从给出的文件流中读取数据. fscanf()的返回值是事实上已赋值的变量的数,如果未进行任何分配时返回EOF.

示例:

         FILE *fp;
         char a[10];
         int b;
         double c;
         fscanf(fp,"%s%d%lf",a,&b,&c);

     sscanf:
     algorithm:
            #include <stdio.h>
           int sscanf( const char *buffer, const char *format, ... );

函数sscanf()和scanf()类似, 只是输入从buffer(缓冲区)中读取. 成功则返回参数数目,失败则返回0,错误原因存于errno中。

示例:

#include<stdio.h>main(){   int i;   unsigned int j;   char input[ ]="10 0x1b aaaaaaaa bbbbbbbb";   char s[5];   sscanf(input,"%d %x %5[a-z] %*s %f",&i,&j,s,s);   printf("%d %d %s\n",i,j,s);}

      printf:
      algorithm:

              #include <stdio.h>

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

printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中.printf()的返回值是打印的字符数,如果发生错误则返回一个负值.


      fprintf:

     algorithm:

             #include <stdio.h>

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

fprintf()函数根据指定的format(格式)(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.

示例:

       char name[20]  = "Mary";

        FILE * out;

       out = fopen( "output.txt", "w" );

        if( out != NULL )

            fprintf( out, "Hello %s\n", name );


     sprintf:

     algorithm:

             #include <stdio.h>

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

sprintf()函数和printf()类似, 只是把输出发送到buffer(缓冲区)中.返回值是写入的字符数量.

示例:

char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "

4.getchar、getc、fgetc、putchar、putc、fputc

     getchar:

     algorithm:

              #include <stdio.h>

              int getchar( void );

getchar()函数从STDIN(标准输入)获取并返回下一个字符,如果到达文件尾返回EOF.

   

    getc:

    algorithm:

             #include <stdio.h>

             int getc( FILE *stream );

getc()函数从stream(流)获取并返回下一个字符,如果到达文件尾返回EOF.


    fgetc:

    algorithm:

            #include <stdio.h>

            int fgetc( FILE *stream );

fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF.fgetc和getc最大的区别在前者是函数,后者是宏,getc由fgetc通过宏实现,调用的时候注意参数stream不能是有副作用的表达式


    putchar:

    algorithm:

             #include <stdio.h>

             int putchar( int ch );

putchar()函数把ch写到STDOUT(标准输出).putchar()的返回值是被写的字符, 发生错误时返回EOF.


     putc:

     algorithm:

            #include <stdio.h>

            int putc( int ch, FILE *stream );

putc()函数把字符ch写到stream(流)中. 返回值是写入的字符, 发生错误时返回EOF.


     fputc:

     algorithm:

               #include <stdio.h>

               int fputc( int ch, FILE *stream );

函数fputc()把给出的字符ch写到给出的输出流. 返回值是字符, 发生错误时返回值是EOF.

5.gets、fgets、puts、fputs

      gets:

      algorithm:

              #include <stdio.h>

              char *gets( char *str );

gets()函数从STDIN(标准输入)读取字符并把它们加载到str(字符串)里,直到遇到新行(\n)或到达EOF. 新行字符翻译为一个null中断符. gets()的返回值是读入的字符串,如果错误返回NULL。


     fgets:

     algorithm:

             #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.

 

      puts:

      algorithm:

               #include <stdio.h>

               int puts( char *str );

函数puts()把str(字符串)写到STDOUT(标准输出)上. puts() 成功时返回非负值, 失败时返回EOF.


      fputs:

      algorithm:

               #include <stdio.h>

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

fputs()函数把str(字符串)指向的字符写到给出的输出流. 成功时返回非负值, 失败时返回EOF.

6.fseek、ftell、rewind、fgetpos、fsetpos

       fseek:

       algorithm:

            #include <stdio.h>

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

函数设置文件指针stream的位置。如果执行成功,stream将指向以origin为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。fseek()成功时返回0,失败时返回非零。origin的值应该是下列值其中之一(在stdio.h中定义):

名称说明SEEK_SET从文件的开始处开始搜索SEEK_CUR从当前位置开始搜索SEEK_END从文件的结束处开始搜索

      

         ftell:

         algorithm:

                #include <stdio.h>

                long ftell( FILE *stream );

ftell()函数返回stream(流)当前的文件位置,如果发生错误返回-1.

        

        rewind:

       algorithm:

                #include <stdio.h>

                void rewind( FILE *stream );

函数rewind()把文件指针移到由stream(流)指定的开始处, 同时清除和流相关的错误和EOF标记


        fgetpos:

        algorithm:

                #include <stdio.h>

                int fgetpos(FILE * stream,fpos_t * position);
fgetpos()函数保存给出的文件流(stream)的位置指针到给出的位置变量(position)中. position变量是fpos_t类型的(它在stdio.h中定义)并且是可以控制在FILE中每个可能的位置对象. fgetpos()执行成功时返回0,失败时返回一个非零值.


          fsetpos:

          algorithm:

                  #include <stdio.h>

                  int fsetpos( FILE *stream, const fpos_t *position );

fsetpos()函数把给出的流的位置指针移到由position对象指定的位置. fpos_t是在stdio.h中定义的. fsetpos()执行成功返回0,失败时返回非零.

Cpp  I/O


1.cout、cerr、clog、cin

        algorithm:

             #include <iostream>

          cout, ostream类的一个对象,可以将数据显示在标准输出设备上.

          cerr, ostream类的另一个对象,它无缓冲地向标准错误输出设备输出数据.

          clog, 类似cerr,但是它使用缓冲输出.

          cin, istream类的一个对象,它用于从标准输入设备读取数据

2.open、close、eof

           open:

           algorithm:

                     void open( const char *filename );

                     void open( const char *filename, openmode mode );

函数open()用于文件流。它打开filename 并将其与当前的流相关联。可以选择的模式有:

模式含义ios::app添加输出ios::ate当已打开时寻找到EOFios::binary以二进制模式打开文件ios::in为读取打开文件ios::out为写入打开文件ios::trunc覆盖存在的文件

               close:

               algorithm:

                        void close();

函数关闭相关的文件流。


                eof:

                algorithm:

                         bool eof();

如果到达相关联的输入文件的末尾,eof()函数返回true,否则返回false。例如:

    char ch;    ifstream fin( "temp.txt" );    while( !fin.eof() ) {      fin >> ch;      cout << ch;    }    fin.close();

3.fill、precision、width

             fill:

             algorithm:

                      char fill();

                      char fill( char ch );

函数fill()可以返回当前填充字符,或者设置当前填充字符为ch 。填充字符被定义为用来填充字符,当一个数字比较指定宽度width小时。默认的填充字符是空格。


             precision:

             algorithm:

                      streamsize precision();

                      streamsize precision( streamsize p );   

precision()函数设置或返回当前要被显示的浮点变量的位数。例如,下面的代码:

    float num = 314.15926535;    cout.precision( 5 );    cout << num;

displays

    314.16

             width:          

             algorithm:

                       int width();

                       int width( int w );

函数 width()返回当前的宽度。可选择参数w用于设定宽度大小。宽度是指每一次输出中显示的字符的最小数目。例如:

    cout.width( 5 );    cout << "2";

displays

        2

(在一个'2'的后面紧跟着四个空格)

4.get、put、read、write

                get:

                algorithm:

                         int get();

                         istream &get( char &ch );

                         istream &get( char *buffer, streamsize num );

                         istream &get( char *buffer, streamsize num, char delim );

                         istream &get( streambuf &buffer );

                         istream &get( streambuf &buffer, char delim );

get()函数被用于输入流,和以下这些:

  • 读入一个字符并返回它的值,
  • 读入一个字符并把它存储在ch
  • 读取字符到buffer直到num - 1个字符被读入, 或者碰到EOF或换行标志,
  • 读取字符到buffer直到已读入num - 1 个字符,或者碰到EOF或delim(delim直到下一次不会被读取),
  • 读取字符到buffer中,直到碰到换行或EOF,
  • 或是读取字符到buffer中,直到碰到换行,EOF或delim。(相反, delim直到下一个get()不会被读取 ).
例如,下面的代码一个字符一个字符的显示文件temp.txt中的内容:
    char ch;    ifstream fin( "temp.txt" );    while( fin.get(ch) )      cout << ch;     fin.close();
               put:

               algorithm:

                         ostream &put( char ch );

函数put()用于输出流,并把字符ch写入流中。


              read:

              algorithm:

                         istream &read( char *buffer, streamsize num );

函数read()用于输入流,在将字符放入buffer 之前从流中读取num 个字节。如果碰到EOF,read()中止,丢弃不论多少个字节已经放入

 

             write:

             algorithm:            

            ostream &write( const char *buffer, streamsize num );

write()函数用于输出流,从buffer中写num个字节到当前输出流中。

5.getline、gcount

                getline:

                algorithm:

                         #include<string>包含getline()

                         istream &getline( char *buffer, streamsize num );

                         istream &getline( char *buffer, streamsize num, char delim );

getline()函数用于输入流,读取字符到buffer中,直到下列情况发生:

  • num - 1个字符已经读入,
  • 碰到一个换行标志,
  • 碰到一个EOF,
  • 或者,任意地读入,直到读到字符delimdelim字符不会被放入buffer中。

              gcount:

              algorithm:

                         streamsize gcount();

函数gcount()被用于输入流,并返回上一次输入操作被读入的字符的数目。

6.seekg、seekp、tellg、tellp

                  seekg:

                  algorithm:

                             istream &seekg( off_type offset, ios::seekdir origin );

                             istream &seekg( pos_type position );

函数seekg()用于输入流,并且它将重新设置"get"指针到当前流的从origin偏移offset个字节的位置上,或是置"get"指针在position位置。


                  seekp:

                  algorithm:

                              ostream &seekp( off_type offset, ios::seekdir origin );

                              ostream &seekp( pos_type position );

seekp()函数用于输出流,但在其它方面和seekg()很类似。


                  tellg:

                  algorithm:

                             pos_type tellg();

tellg()函数用于输入流,并返回流中"get"指针的当前位置


                  tellp:

                  algorithm:

                            pos_type tellp();

tellp()函数用于输出流中,并返回在流中当前"put"指针的位置。 例如,下面的代码显示了当一个文件指针写入一个流的时候的情形:

string str(“test”);
ofstream fout(“e:\\output.txt”);
int k;
for(k = 0; k < str.length(); k++)
{
     cout<<”File point:”<<fout.tellp();
     fout.put(str[k]);
     cout <<” “<<str[k]<<endl;
}
fout.close();
输出:
File point:0 t
File point:1 e
File point:2 s
File point:3 t

7.flags、setf、unsetf

                  flags:

                  algorithm:     

              fmtflags flags();              fmtflags flags( fmtflags f );
flags()函数或者返回当前流的格式标志,或者为当前流设置标志为 f


                  setf:

                  algorithm:

                           fmtflags setf( fmtflags flags );

                           fmtflags setf( fmtflags flags, fmtflags needed );

函数setf()设置当前流的格式化标志为flags。可选标志needed 只允许flags标志和needed标志都被设置。返回值是前面设置的标志。
例如:

    int number = 0x3FF;    cout.setf( ios::dec );    cout << "Decimal: " << number << endl;    cout.unsetf( ios::dec );    cout.setf( ios::hex );    cout << "Hexadecimal: " << number << endl;

提示,上面的代码和下面的代码的功能是一致的:

    int number = 0x3FF;    cout << "Decimal: " << number << endl << hex << "Hexadecimal: " << number << dec << endl;

                   unsetf:

                   algorithm:             

               void unsetf( fmtflags flags );
函数unsetf()用于清除与当前流相关的给定的标志flags



原创粉丝点击