C 輸入輸出流的基本函式及語法

2021-06-27 10:21:35 字數 2795 閱讀 4018

1,expect_*系列和assert_*系列。

這兩個系列的函式都是用於斷言,也就是說判斷是否滿足要求,滿不滿足都會輸出log。

舉個例子,expect_eq(3,add(1, 3))這裡就是判斷3和add(1, 3)是否相等,然後在結果中輸出

g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(16): 

error: value of: add(1, 3)   actual: 4 expected:3

這裡會返回error,因為前面是3所以要equal的話後面也要等於3,所以期望是3,但是1+3實際

返回了4,所以error。

其他型別還有expect_true和expect_false等等。

接下來我說說兩者的區別,expect_用於打出資訊,如果是否error都會往下執行,也就說用於

檢視。

而assert_用於檢查,一旦檢查失敗就退出當前函式(不是退出當前程式)。

注意:只有失敗了error才會打出資訊,成功是不會打的。

強化:如果遇到特殊情況,例如在迴圈裡面報錯了,那根本就不知道是i = ?的時候退出的,所以

加入了新的元素,<<.>

例子,expect_true(false)<

輸出的是

g:\myproject\c++\gtestdemo\gtestdemo\gtestdemo.cpp(16): 

error: value of:false   actual: false,expected:true

mimida?8(i=8)//這一行是輸入輸出流打出來的

2,ifstream

輸入流,把檔案的東西讀到流裡面。 例如

std::ifstream

input("./case/encoding/utf8");

這裡就是把utf8讀到input裡面去了。

3,getline

從流元素裡讀到變數裡。如果是getline(流,變數,停止符)。

停止符如果不填也就是getline(流,變數)那麼預設為\n。

流的位置填流元素,一般是自己定義的流或者cin這種,而變數也是自己定義的。

4,snprintf

也是跟getline一樣可以有不同數量的變數。

snprintf(input, sizeof(input), "%s", line.c_str());
這個函式用於把後面的字串(也可以是其他元素)放到前面的變數裡面來。這裡的line是string型別。

第乙個填要被放的變數,第二個是長度,如果太長插不進去,就截斷成size-1,最後乙個放\0.

如果太短就直接在後面放\0。

解釋一下這裡為什麼用c_str(),這個是取字串的首元素的位址,也就是char*。一般用於把字串string放到char*裡面去。

這裡順便說一下string的好處就是不用自己定義長度,也就是說你不知道有多長的時候可以用string。

5,fgetc和fputc

雙生的兩個函式。get是從檔案指標stream指向的檔案中讀取乙個字元,讀取後游標自動後移。返回值是你自己讀的元素。當讀到檔案末尾或者出錯的時候返回eof。

put剛好相反,是寫入乙個元素,寫完游標後移,可以寫入字元常量或者變數。如果被寫入的檔案不存在則建立乙個。如果寫入成功則返回寫入的字元,否則返回eof。

例子:while(!feof(stream))

fgetc(fputc(stream),stream);

這個例子是乙個自己給自己寫的例子,到檔案末尾就會停止。

6,fprintf

格式化輸出到流檔案。

int fprintf(file *stream,char *format,[argument])

format可以填一些其他東西用於定規則或者拓展變數,例如填「%s」表明只輸出string,而%*.s則是定長的string,這裡有兩個變數,分別是size和string。

這裡注意stream可以填stderr用於輸出資訊到終端fprintf(stderr,"error"),一般檔案流的輸出不用print而用這個方式,因為可以防止檔案互相流-》的時候誤寫。

7,fopen

開啟檔案的函式。

file * fopen(const char * path,const char * mode);

前面返回的是流,以後就用這個file來操作了,path是位址,mode有很多方式。因為很容易會open失敗,所以常加入

if(fp==null) //如果失敗了

8,feof

剛才上面有寫這個函式,用於判斷是否是流上檔案的結束符。既可用於二進位制檔案也可判斷文字檔案。

原話是:feof(fp)有兩個返回值:如果遇到檔案結束,函式feof(fp)的值為非零值,否則為0。

需要注意的事:

因為常與fgetc一起用,但是fgetc是讀當前返回的元素,也就是說,讀完最後乙個元素之後再get一次才會get到eof,這時如果還返回,就會多輸出乙個不合法值,所以一般這麼用。

也就是說先printf再get。

與eof的區別:

其實概念上就有區別,如果是判斷是否結尾的建議全用feof。

eof其實只是乙個變數,他是檔案讀到最後的時候返回的變數,也就是get == eof來判斷是否是結尾。但是常常出現很多問題,因為在二進位制檔案裡面的eof識別符號很多,而且往往都不是在結尾。

而且還有乙個更嚴重的問題,就是cget遇到錯誤也會返回eof,所以eof在很大程度上根本就不能用於檢測檔案結尾。

相反,feof的檢測機制是測試當前檔案指標是否在檔案末,相對來說安全得多。

c 基本語法輸入輸出

1.寫c 程式之前需要先把框架 搭好 無報錯後再繼續向下寫 include includeusing namespace std 單行 注釋 多行 注釋 int main 2.c 輸出 scanf,printf 版本 include includeusing namespace std 輸入 輸出 ...

c 輸入輸出基本語法

include using namespace std 命名空間 cout 結果是 addarray 流物件cin,型別是istream 注意 c 允許程式設計師在任意位置宣告變數 cin.ignore n 忽略前n個位元組 cin.getline buffer,10 獲取一行 cin.get 獲取...

C 輸入 輸出流

低階i o功能 如無格式的i o 通常指大量的位元組在裝置到記憶體或記憶體到裝置的簡單傳輸。高階i o功能 格式化i o 它將位元組組合成有意義的單元,如資料型別。對於大容量檔案的處理,使用無格式的i o可獲得最佳的效能。不帶引數值成員函式get 從指定的流中讀取乙個字元 即使是空格 並返回該字元作...