輸入輸出及檔案操作 C風格IO函式

2021-09-28 21:51:53 字數 4476 閱讀 2005

因專案需要從檔案中讀取多組浮點型別資料,專門複習總結了一下c/c++的輸入輸出操作。

c風格輸入輸出-i/o函式

c 輸入 & 輸出

c 語言把所有的裝置都當作檔案。所以裝置(比如顯示器)被處理的方式與檔案相同。以下三個檔案會在程式執行時自動開啟,以便訪問鍵盤和螢幕。

標準檔案

檔案指標

裝置

標準輸入

stdin 鍵盤

標準輸出

stdout 螢幕

標準錯誤

stderr

您的螢幕

檔案指標是訪問檔案的方式

c風格的i/o函式

由和提供

通用的c輸出函式:

int printf(const char* format ...);           //寫入stdio

scanf()

函式用於從標準輸入(鍵盤)讀取並格式化,

printf()

函式傳送格式化輸出到標準輸出(螢幕)。

int sprintf(file*, const char* format ...);     //寫入「檔案」 (stdout、stderr等)

int fprintf(char* p, const char* format ...);   //寫入p[0]...

在格式串format的控制下,產生任意引數序列的格式化輸出。格式串裡包含兩類物件:

普通字元,它們將直接複製到輸出流;

轉換描述,每個描述導致對下乙個引數的轉換和輸出。每個轉換都有%引導。例如,

printf(「%s there are %d numbers.」, my_str, num_of_members);

轉換描述集相當大,在%之後可以有:

常用的輸出控制符主要有以下幾個:

控制符

說明%d

按十進位制整型資料的實際長度輸出。

%ld輸出長整型資料。

%md m

為指定的輸出欄位的寬度。如果資料的位數小於

m,則左端補以空格,若大於

m,則按實際位數輸出。 %u

輸出無符號整型(

unsigned

)。輸出無符號整型時也可以用

%d,這時是將無符號轉換成有符號數,然後輸出。但程式設計的時候最好不要這麼寫,因為這樣要進行一次轉換,使

cpu

多做一次無用功。 %c

用來輸出乙個字元。 %f

用來輸出實數,包括單精度和雙精度

%lf,以小數形式輸出。不指定字段寬度,由系統自動指定,整數部分全部輸出,小數部分輸出

6 位,超過

6 位的四捨五入。

%.mf

輸出實數時小數點後保留

m 位,注意

m 前面有個點。 %o

以八進位制整數形式輸出,這個就用得很少了,了解一下就行了。 %s

用來輸出字串。用

%s 輸出字串同前面直接輸出字串是一樣的。但是此時要先定義字元陣列或字元指標儲存或指向字串,這個稍後再講。 %x

(或%x

或%#x

或%#x)

以十六進製制形式輸出整數,這個很重要。

如果是小寫的x,輸出的字母就是小寫的;如果是大寫的x,輸出的字母就是大寫的;如果加乙個#,就以標準的十六進製制形式輸出。 例:

# include

int main(void)

輸出結果:

2f2f

0x2f

0x2f

用printf()在某種意義上來說是不安全的,因為它不做型別檢查。

要輸出%,只需在前面加上乙個%

getchar():從輸入讀取乙個字元。

例:int i;                  //為對照int值eof檢測檔案結束

while((i=getchar()) != eof)

c風格檔案操作

開啟檔案

您可以使用 fopen( ) 函式來建立乙個新的檔案或者開啟乙個已有的檔案,這個呼叫會初始化型別 file 的乙個物件,型別 file 包含了所有用來控制流的必要的資訊。下面是這個函式呼叫的原型:

file

*fopen

(const

char

*filename

,const

char

*mode );

在這裡,filename是字串,用來命名檔案,訪問模式

mode的值可以是下列值中的乙個:

模式

描述r

開啟乙個已有的文字檔案,允許讀取檔案。 w

開啟乙個文字檔案,允許寫入檔案。如果檔案不存在,則會建立乙個新檔案。在這裡,您的程式會從檔案的開頭寫入內容。如果檔案存在,則該會被截斷為零長度,重新寫入。 a

開啟乙個文字檔案,以追加模式寫入檔案。如果檔案不存在,則會建立乙個新檔案。在這裡,您的程式會在已有的檔案內容中追加內容。 r+

開啟乙個文字檔案,允許讀寫檔案。 w+

開啟乙個文字檔案,允許讀寫檔案。如果檔案已存在,則檔案會被截斷為零長度,如果檔案不存在,則會建立乙個新檔案。 a+

開啟乙個文字檔案,允許讀寫檔案。如果檔案不存在,則會建立乙個新檔案。讀取會從檔案的開頭開始,寫入則只能是追加模式。

如果處理的是二進位制檔案,則需使用下面的訪問模式來取代上面的訪問模式:

"rb"

,"wb"

,"ab"

,"rb+"

,"r+b"

,"wb+"

,"w+b"

,"ab+"

,"a+b"

關閉檔案

為了關閉檔案,請使用 fclose( ) 函式。函式的原型如下:

int

fclose

(file

*fp

);

如果成功關閉檔案,fclose( )函式返回零,如果關閉檔案時發生錯誤,函式返回

eof。這個函式實際上,會清空緩衝區中的資料,關閉檔案,並釋放用於該檔案的所有記憶體。

eof

是乙個定義在標頭檔案

stdio.h中的常量。

c 標準庫提供了各種函式來按字元或者以固定長度字串的形式讀寫檔案。

寫入檔案

intfputc

(intc,

file

*fp );

函式 fputc() 把引數 c 的字元值寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回寫入的字元,如果發生錯誤,則會返回 eof。

intfputs

(const

char*s

,file

*fp );

函式 fputs() 把乙個以 null 結尾的字串 s 寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回乙個非負值,如果發生錯誤,則會返回 eof。

int

fprintf

(char*

p, const char* format ...);

//寫入

p[0]... 函式

fprintf()

來寫把乙個格式化字串寫入到檔案中。如果成功,該函式返回成功匹配和賦值的個數。如果到達檔案末尾或發生讀錯誤,則返回

eof。

讀取檔案

類似讀取函式有:

intfgetc

(file

*fp );

fgetc() 函式從 fp 所指向的輸入檔案中讀取乙個字元。返回值是讀取的字元,如果發生錯誤則返回 eof。

char

*fgets

(char

*buf

,intn,

file

*fp );

函式 fgets() 從 fp 所指向的輸入流中讀取 n - 1 個字元。它會把讀取的字串複製到緩衝區 buf,並在最後追加乙個 null 字元來終止字串。

如果這個函式在讀取最後乙個字元之前就遇到乙個換行符 '\n' 或檔案的末尾 eof,則只會返回讀取到的字元,包括換行符。

int

fscanf

(char*

p, const char* format ...);

函式從檔案中讀取格式化字串,但是在遇到第乙個空格字元時,它會停止讀取。

檔案輸入輸出I O

file主要用於在磁碟上讀寫檔案 1 在程式中,用file和jfilechoose讓使用者定義或者指定乙個檔案 2 在檔案中,用fileoutputstream和fileinputstream讀寫位元組 3 在檔案中,用dataoutputstream和datainputstream讀寫原始資料型別...

檔案輸入輸出(IO)

模式描述 r開啟乙個已有的文字檔案,允許讀取檔案。w開啟乙個文字檔案,允許寫入檔案。如果檔案不存在,則會建立乙個新檔案。在這裡,您的程式會從檔案的開頭寫入內容。如果檔案存在,則該會被截斷為零長度,重新寫入。a開啟乙個文字檔案,以追加模式寫入檔案。如果檔案不存在,則會建立乙個新檔案。在這裡,您的程式會...

C 風格的檔案輸入輸出流

輸出主要由過載的左移操作符 來完成,輸入主要由過載的右移 操作符 完成。a表示將資料放入a物件中。接下來我們繼續看一 下c 風格的串流控制,c 引入了ostringstream istringstream stringstream這三個類,要使用他們建立物件就必須包含sstream.h標頭檔案。is...