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 從指定的流中讀取乙個字元 即使是空格 並返回該字元作...