c 中的輸入 輸出和檔案流

2021-09-11 22:25:15 字數 3868 閱讀 1450

前言:最近又拾起了c++ primer plus,於是學習了這一章,於是寫下部落格記錄以前忽略的。

1.關於cout的輸出精度,系統預設的是6,也就是顯示的總位數,但是如果末尾的數字為0,會省略,比如13.2000的精度為6,但是列印出來為13.2, 0被省略

所以如果我們想要修改精度,怎麼修改?在cout前用語句:

cout.precison(x);//x為想要的精度
比如x=2,此時13.2輸出就為13;

2.前面提到了精度,但是會省略末尾的0,如果我們不想省略0,怎麼辦?此時在cout前面用語句:

cout.setf(ios_base::showpoint);
這樣如果我們13.2000輸出就為13.2000.

我們假如 a 為 int ,此時我們cin 》a ;如果我們輸入的是 12.3,那麼a為多少呢?此時a為12,因為cin將依次讀入你的字元,直到遇到不合法的或者回車,所以遇到.時就停止了。或者輸入12g,此時a還為12。

另外,cin 這句話會返回true和faulse,當cin給a輸出的值符合規定,返回true,否則返回fause。但是上面的12.3和12g是符合規定的,因為a有值,但是hdsh就不行,因為a沒有任何值。所以利用這一點就可以放進if和while中間

cin>> 雖然也可以輸入字串,但是cin>>無法輸入空格,它預設空格也是終止符,和空格一樣,比如:

char a[100];

cin>> a;

cout << a;//當你輸入zx is a student,此時只傳入zx給a!!!!

1.單字元輸入檢測

這種方法就是依次列印輸入的字元,但是輸入時是輸入的字串,所以這種方法也就是乙個乙個檢測你輸出的字元是否符合你的要求,直到檢測到不符合的。此時用到的函式是cin的成員函式get(char &)和get();

先說get(char &),這個函式是從你輸入的字元傳中,從第乙個字元開始,賦值給引數,然後以後每執行一次這句話,跳到下個字元。

比如:

int main()

return 0;

}

所以這個程式就可以檢測你輸入的字串,列印回車前你輸入的字串。

再說get(),他和上面的get(char &)一樣,只不過是將返回值返給引數。用法如下:

int main()

return 0;

}

所以,上面我們可以把回車改為某乙個字元,比如『b』。此時就是檢測你輸入的字串,直到檢測到有b時就停止列印。

另外,這兩個函式也是書中提倡的輸入。

2.字串輸入

前面提到過cin》這個不能輸入空格,所以如果你想輸入一串含有空格的字串怎麼辦?

用:get()成員函式

用法:

char a[100];

cin.get(a,100); //第乙個引數是你要傳入的字元陣列,第二個引數和你的a的大小一樣。

cout << a;//當你輸入zx is a student,此時就完美列印

注意:cin.get(a,100);這個函式遇到回車就會終止,如果你想要指定其他的終止符,可以引入第三個引數:cin.get(a,100,『b』);,此時就表示當遇到b時就終止傳入。

總結:1.cin>> 不能輸入空格,但是cin.get()可以輸入空格。另外cin.get()既可以單字元輸入也可以字串輸入,看的是引數的形式。

2.上面的兩種方法都可以用於檢測,一種是乙個乙個輸入乙個乙個檢測,另外乙個是直接傳入字串直到遇到你規定的終止符

進行c++的檔案操作,需要包含標頭檔案#include,這是檔案操作的標頭檔案,包含檔案操作的各種流。寫入檔案,就需要建立乙個ofstream物件,使用《往裡面寫入內容。要讀取檔案,需要建立乙個ifstream物件,使用get()函式取出內容,這裡用的get函式也是每執行一次獲取乙個字元。

寫入檔案步驟:

1.建立乙個ofstream物件

2.將該物件和相關的檔案對應起來。也就是開啟檔案,使用open函式。

3.使用《往裡面寫東西

4.使用close()關閉物件。

注意:以這種方法開啟的檔案,如果沒有這個檔案,會建立乙個。如果有這個檔案,會首先清空他!!後面會將如何追加寫入

讀取檔案操作:

1.建立乙個ifstream物件

2.將該物件和相關的檔案對應起來。也就是開啟檔案,使用open函式。

3.使用get()函式或者getline()獲取內容

4.使用close()關閉物件。

注意:關於讀取內容時,我們通常是將內容讀取出來賦值給另外乙個字元或者字串,如果想要賦值給乙個字元,可以用下面的形式來列印內容

while(file2.get(a))//因為get(a)只要不是末尾就返回true

也可以讀取一排:

char buff;

file2.getline(buff,100);

#include #include #include using namespace std;

int main()

cout << "done!"《注意:我們再利用ifstream進行檔案的讀取操作時,如果這個檔案不存在,是沒法讀取的,所以在執行完讀取檔案時的open函式後,需要檢查一下是否開啟成功了。做法就是:

ifstream file2;

file2.open(filename.c_str());

if( ! file2.is_open()) //is_open()就是判斷是否開啟,前面加了!就是沒有開啟。

程式有時在讀取檔案時可能需要開啟多個檔案,我們可以定義多個ifstream物件,分別關聯(open)各自的檔案,除此之外,我們也可以定義乙個物件,然後關聯(open)第乙個檔案,對第乙個檔案進行相關的處理,完了後close,clear。然後再將這個物件關聯(open)第二個檔案。。。。。依次下去處理接下來的檔案。第二種的效率更高。但是之後我們將要學習一種新的技術來讀取檔案,即讓程式能夠使用迴圈來處理檔案。

前面提到過當我們用ofstream開啟檔案進行寫入時,是覆蓋寫入,如果想要追加寫入,可以再open裡面加入引數。

用:

ofstream ofile;
配上例子:

#include #include #include #include using namespace std;

const string name = "test_file13.txt"; //the file name

int main()

ifile.close();

}//add new content

ofstream ofile;

if(!ofile.is_open())

if(ofile.is_open())

ofile << endl;

ofile.close();

}//show revised file

ifile.open(name.c_str());

if(ifile.is_open())

ifile.close();

cout << endl;

}return 0;

}

C 之輸入輸出流和檔案傳輸流

ios是抽象基類,由它派生出istream類和ostream類,iostream類支援輸入輸出操作,iostream類是從istream類和ostream類通過多重繼承而派生的類 類ifstream繼承了類istream,類ofstream繼承了類ostream,類fstream繼承了 類iostr...

C 檔案輸入輸出流

dat 檔案 資料檔案 二進位制檔案字尾名為 bin 文字檔案 字尾名 txt doc.docx wps 以ascii 碼儲存資料的 檔案指標,用於指明其位置 檔案開關 fopen 第二個引數char 型別 需要 括起來 err fopen s fp1,file information.txt a ...

C 檔案輸入輸出流

寫在前面的話 c 中對檔案的操作跟c語言是有很大差別的,因此總結一下c 對檔案的操作。在c 中隊檔案的輸入輸出流和對記憶體的輸入輸出流以及對字串的輸入輸出流介面是一致的,如果輸入流能產生位元組,可以用乙個提取操作符從這個流中獲取資訊。這個提取符產生並格式化目的物件所期望的資訊型別。雖然輸入流用起來很...