標准C語言的輸入輸出流(i/o)方法詳解


cppreference.com -> 標准 C I/O ->詳細說明

標准 C I/O


clearerr

語法:

  #include <stdio.h>
  void clearerr( FILE *stream );

clearerr函數重置錯誤標記和給出的流的EOF指針. 當發生錯誤時,你可以使用perror()判斷實際上發生了何種錯誤.

相關主題: feof(), ferror(), 和perror().


fclose

語法:

  #include <stdio.h>
  int fclose( FILE *stream );

函數fclose()關閉給出的文件流, 釋放已關聯到流的所有緩沖區. fclose()執行成功時返回0,否則返回EOF.

相關主題: fopen(), freopen(), 和fflush().


feof

語法:

  #include <stdio.h>
  int feof( FILE *stream );

函數feof()在到達給出的文件流的文件尾時返回一個非零值.

相關主題: clearerr(), ferror(), perror(), putc()getc().


ferror

語法:

  #include <stdio.h>
  int ferror( FILE *stream );

ferror()函數檢查stream(流)中的錯誤, 如果沒發生錯誤返回0,否則返回非零. 如果發生錯誤, 使用perror()檢測發生什么錯誤.

相關主題: clearerr(), feof(), perror(),


fflush

語法:

  #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();

相關主題: fclose(), fopen(), fread(), fwrite(), getc(), 和putc().


fgetc

語法:

  #include <stdio.h>
  int fgetc( FILE *stream );

fgetc()函數返回來自stream(流)中的下一個字符,如果到達文件尾或者發生錯誤時返回EOF.

相關主題: fputc(), getc(), putc(), 和fopen().


fgetpos

語法:

  #include <stdio.h>
  int fgetpos( FILE *stream, fpos_t *position );

fgetpos()函數保存給出的文件流(stream)的位置指針到給出的位置變量(position)中. position變量是fpos_t類型的(它在stdio.h中定義)並且是可以控制在FILE中每個可能的位置對象. fgetpos()執行成功時返回0,失敗時返回一個非零值.

相關主題: fsetpos(), fseek()ftell().


fgets

語法:

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


fopen

語法:

  #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 );
    

fprintf

語法:

  #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 );

相關主題: printf()fscanf().


fputc

語法:

  #include <stdio.h>
  int fputc( int ch, FILE *stream );

函數fputc()把給出的字符ch寫到給出的輸出流. 返回值是字符, 發生錯誤時返回值是EOF.

相關主題: fgetc(), fopen(), fprintf(), fread(), 和fwrite().


fputs

語法:

  #include <stdio.h>
  int fputs( const char *str, FILE *stream );

fputs()函數把str(字符串)指向的字符寫到給出的輸出流. 成功時返回非負值, 失敗時返回EOF.

相關主題: fgets(), gets(), puts(), fprintf(), 和fscanf().


fread

語法:

  #include <stdio.h>
  int fread( void *buffer, size_t size, size_t num, FILE *stream );

函數fread()讀取[num]個對象(每個對象大小為size(大小)指定的字節數),並把它們替換到由buffer(緩沖區)指定的數組. 數據來自給出的輸入流. 函數的返回值是讀取的內容數量...

使用feof()ferror()判斷到底發生哪個錯誤.

相關主題: fwrite(), fopen(),fscanf(), fgetc()getc().


freopen

語法:

  #include <stdio.h>
  FILE *freopen( const char *fname, const char *mode, FILE *stream );

freopen()函數常用於再分配一個以存在的流給一個不同的文件和方式(mode).在調用本函數后,給出的文件流將會用mode(方式)指定的訪問模式引用fname(文件名). freopen()的返回值是新的文件流,發生錯誤時返回NULL.

相關主題: fopen()fclose().


fscanf

語法:

  #include <stdio.h>
  int fscanf( FILE *stream, const char *format, ... );

函數fscanf()以scanf()的執行方式從給出的文件流中讀取數據. fscanf()的返回值是事實上已賦值的變量的數,如果未進行任何分配時返回EOF.

相關主題: scanf()fprintf().


fseek

語法:

  #include <stdio.h>
  int fseek( FILE *stream, long offset, int origin );

函數fseek()為給出的流設置位置數據. origin的值應該是下列值其中之一(在stdio.h中定義):

名稱 說明
SEEK_SET 從文件的開始處開始搜索
SEEK_CUR 從當前位置開始搜索
SEEK_END 從文件的結束處開始搜索

fseek()成功時返回0,失敗時返回非零. 你可以使用fseek()移動超過一個文件,但是不能在開始處之前. 使用fseek()清除關聯到流的EOF標記.

相關主題: ftell(), rewind(), fopen(), fgetpos()fsetpos().


fsetpos

語法:

  #include <stdio.h>
  int fsetpos( FILE *stream, const fpos_t *position );

fsetpos()函數把給出的流的位置指針移到由position對象指定的位置. fpos_t是在stdio.h中定義的. fsetpos()執行成功返回0,失敗時返回非零.

相關主題: fgetpos(), fseek()ftell().


ftell

語法:

  #include <stdio.h>
  long ftell( FILE *stream );

ftell()函數返回stream(流)當前的文件位置,如果發生錯誤返回-1.

相關主題: fseek()fgetpos().


fwrite

語法:

  #include <stdio.h>
  int fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

fwrite()函數從數組buffer(緩沖區)中, 寫count個大小為size(大小)的對象到stream(流)指定的流. 返回值是已寫的對象的數量.

相關主題: fread(), fscanf(), getc()fgetc().


getc

語法:

  #include <stdio.h>
  int getc( FILE *stream );

getc()函數從stream(流)獲取並返回下一個字符,如果到達文件尾返回EOF. getc()和fgetc()是一樣的. 例如:

    char ch;
    FILE *input = fopen( "stuff", "r" );
    
    ch = getc( input );
    while( ch != EOF ) {
      printf( "%c", ch );
      ch = getc( input );
    }

相關主題: fputc(), fgetc(), putc()fopen().


getchar

語法:

  #include <stdio.h>
  int getchar( void );

getchar()函數從STDIN(標准輸入)獲取並返回下一個字符,如果到達文件尾返回EOF.

相關主題: fputc(), fgetc(), putc()fopen().


gets

語法:

  #include <stdio.h>
  char *gets( char *str );

gets()函數從STDIN(標准輸入)讀取字符並把它們加載到str(字符串)里,直到遇到新行(\n)或到達EOF. 新行字符翻譯為一個null中斷符. gets()的返回值是讀入的字符串,如果錯誤返回NULL.

相關主題: fputs(), fgetc(),fgets()puts().


perror

語法:

  #include <stdio.h>
  void perror( const char *str );

perror()函數打印str(字符串)和一個相應的執行定義的錯誤消息到全局變量errno中.


printf

語法:

  #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"表示不同的變量類型, 也可以限制變量的長度.

Code 格式
%c 字符
%d 帶符號整數
%i 帶符號整數
%e 科學計數法, 使用小寫"e"
%E 科學計數法, 使用大寫"E"
%f 浮點數
%g 使用%e或%f中較短的一個
%G 使用%E或%f中較短的一個
%o 八進制
%s 一串字符
%u 無符號整數
%x 無符號十六進制數, 用小寫字母
%X 無符號十六進制數, 用大寫字母
%p 一個指針
%n 參數應該是一個指向一個整數的指針 指向的是字符數放置的位置
%% 一個'%'符號

一個位於一個%和格式化命令間的整數擔當着一個最小字段寬度說明符,並且加上足夠多的空格或0使輸出足夠長. 如果你想填充0,在最小字段寬度說明符前放置0. 你可以使用一個精度修飾符,它可以根據使用的格式代碼而有不同的含義.

  • 用%e, %E和 %f,精度修飾符讓你指定想要的小數位數. 例如,

     

        %12.6f
    

    將會至少顯示12位數字,並帶有6位小數的浮點數.

  • 用%g和 %G, 精度修飾符決定顯示的有效數的位數最大值.
  • 用%s,精度修飾符簡單的表示一個最大的最大長度, 以補充句點前的最小字段長度.

所有的printf()的輸出都是右對齊的,除非你在%符號后放置了負號. 例如,

 

    %-12.4f

將會顯示12位字符,4位小數位的浮點數並且左對齊. 你可以修改帶字母lh%d, %i, %o, %u和 %x 等類型說明符指定長型和短型數據類型 (例如 %hd 表示一個短整數). %e, %f和 %g 類型說明符,可以在它們前面放置l指出跟隨的是一個double. %g, %f和 %e 類型說明符可以置於字符'#'前保證出現小數點, 即使沒有小數位. 帶%x類型說明符的'#'字符的使用, 表示顯示十六進制數時應該帶'0x'前綴. 帶%o類型說明符的'#'字符的使用, 表示顯示八進制數時應該帶一個'0'前綴.

你可以在輸出字符串中包含 連續的Escape序列.

printf()的返回值是打印的字符數,如果發生錯誤則返回一個負值.

相關主題: scanf()fprintf().


putc

語法:

  #include <stdio.h>
  int putc( int ch, FILE *stream );

putc()函數把字符ch寫到stream(流)中. 返回值是寫入的字符, 發生錯誤時返回EOF. 例如:

    char ch;
    FILE *input;
    input = fopen( "temp.cpp", "r" );
    ch = getc( input );
    while( ch != EOF ) {
      printf( "%c", ch );
      ch = getc( input );
    }

顯示"temp.cpp"的內容到屏幕.

相關主題: fgetc(), fputc(), getchar()putchar().


putchar

語法:

  #include <stdio.h>
  int putchar( int ch );

putchar()函數把ch寫到STDOUT(標准輸出). 代碼

    putchar( ch );

    putc( ch, STDOUT );

一樣.

putchar()的返回值是被寫的字符, 發生錯誤時返回EOF.

相關主題: putc()


puts

語法:

  #include <stdio.h>
  int puts( char *str );

函數puts()把str(字符串)寫到STDOUT(標准輸出)上. puts() 成功時返回非負值, 失敗時返回EOF.

相關主題: putc(), gets()printf().


remove

語法:

  #include <stdio.h>
  int remove( const char *fname );

remove()函數刪除由fname(文件名)指定的文件. remove()成功時返回0,如果發生錯誤返回非零.

相關主題: rename()


rename

語法:

  #include <stdio.h>
  int rename( const char *oldfname, const char *newfname );

函數rename()更改文件oldfname的名稱為newfname. rename()成功時返回0,錯誤時返回非零.

相關主題: remove()


rewind

語法:

  #include <stdio.h>
  void rewind( FILE *stream );

函數rewind()把文件指針移到由stream(流)指定的開始處, 同時清除和流相關的錯誤和EOF標記.

相關主題: fseek()


scanf

語法:

  #include <stdio.h>
  int scanf( const char *format, ... );

scanf()函數根據由format(格式)指定的格式從stdin(標准輸入)讀取,並保存數據到其它參數. 它和printf()有點類似. format(格式)字符串由控制字符,空白字符和非空白字符組成. 控制字符以一個%符號開始,如下:

控制字符 說明
%c 一個單一的字符
%d 一個十進制整數
%i 一個整數
%e, %f, %g 一個浮點數
%o 一個八進制數
%s 一個字符串
%x 一個十六進制數
%p 一個指針
%n 一個等於讀取字符數量的整數
%u 一個無符號整數
%[] 一個字符集
%% 一個精度符號

scanf()讀取匹配format(格式)字符串的輸入. 當讀取到一個控制字符, 它把值放置到下一個變量. 空白(tabs, 空格等等)會跳過. 非空白字符和輸入匹配, 然后丟棄. 如果是一個在%符號和控制符間的數量, 那么只有指定數量的字符轉換到變量中. 如果scanf()遇到一個字符集(用%[]控制字符表示), 那么在括號中的任意字符都會讀取到變量中. scanf()的返回值是成功賦值的變量數量, 發生錯誤時返回EOF.

相關主題: printf()fscanf().


setbuf

語法:

  #include <stdio.h>
  void setbuf( FILE *stream, char *buffer );

setbuf()函數設置stream(流)使用buffer(緩沖區),如果buffer(緩沖區)是null,關閉緩沖. 如果使用非標准緩沖尺寸, 它應該由BUFSIZ字符決定長度.

相關主題: fopen(), fclose(), setvbuf(),


setvbuf

語法:

  #include <stdio.h>
  int setvbuf( FILE *stream, char *buffer, int mode, size_t size );

函數setvbuf()設置用於stream(流)的緩沖區到buffer(緩沖區),其大小為size(大小). mode(方式)可以是:

  • _IOFBF, 表示完全緩沖
  • _IOLBF, 表示線緩沖
  • _IONBF, 表示無緩存

 

相關主題: setbuf(),


sprintf

語法:

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

sprintf()函數和printf()類似, 只是把輸出發送到buffer(緩沖區)中.返回值是寫入的字符數量. 例如:

    char string[50];
    int file_number = 0;
    
    sprintf( string, "file.%d", file_number );
    file_number++;
    output_file = fopen( string, "w" );

相關主題: printf(), fsprintf(),


sscanf

語法:

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

函數sscanf()和scanf()類似, 只是輸入從buffer(緩沖區)中讀取.

相關主題: scanf(), fscanf(),


tmpfile

語法:

  #include <stdio.h>
  FILE *tmpfile( void );

函數tempfile()用一個獨特的文件名打開一個臨時文件,並返回一個到該文件的指針.如果發生錯誤則返回null.

相關主題: tmpnam(),


tmpnam

語法:

  #include <stdio.h>
  char *tmpnam( char *name );

tmpnam()函數創建一個獨特的文件名並保存在name中. tmpnam()最多可以調用TMP_MAX指定的次數.

相關主題: tmpfile(),


ungetc

語法:

  #include <stdio.h>
  int ungetc( int ch, FILE *stream );

函數ungetc()把字符ch放回到stream(流)中.

相關主題: getc(),


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 );

這些函數和printf()非常相似, fprintf()sprintf()的不同在於參數列表是一個指向一系列參數的指針. va_list在STDARG.H中定義,並且也可以被va_arg()使用. 例如:

    void error( char *fmt, ... ) {
      va_list args;
      
      va_start( args, fmt );
      fprintf( stderr, "Error: " );
      vfprintf( stderr, fmt, args );
      fprintf( stderr, "\n" );
      va_end( args );
      exit( 1 );
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM