關於C 輸入輸出筆記

2021-06-27 23:52:34 字數 3294 閱讀 6939

什麼是緩衝區

緩衝區又稱為快取,它是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做緩衝區。

緩衝區根據其對應的是輸入裝置還是輸出裝置,分為輸入緩衝區和輸出緩衝區。

為什麼要引入緩衝區

比如我們從磁碟裡取資訊,我們先把讀出的資料放在緩衝區,計算機再直接從緩衝區中取資料,等緩衝區的資料取完後再去磁碟中讀取,這樣就可以減少磁碟的讀寫次數,再加上計算機對緩衝區的操作大大快於對磁碟的操作,故應用緩衝區可大大提高計算機的執行速度。

如: cout << "aaa" << endl;和 cout << "aaa";都能將aaa輸出,前乙個除了多了乙個換行外,它的aaa是被手動強制輸出的。後乙個輸出不會立即顯示,而是被儲存在緩衝區中,直到緩衝區填滿。然後,程式將重新整理緩衝區,把內容傳送出去,並清空緩衝區,以儲存新的資料。通常,緩衝區為512位元組或其整數倍。。由於間隔比較短,讓人以為和第乙個是一樣的。

緩衝區的型別

緩衝區 分為三種型別:全緩衝、行緩衝和不帶緩衝。

1、全緩衝

在這種情況下,當填滿標準i/o快取後才進行實際i/o操作。全緩衝的典型代表是對磁碟檔案的讀寫。

2、行緩衝

在這種情況下,當在輸入和輸出中遇到換行符時,執行真正的i/o操作。這時,我們輸入的字元先存放在緩衝區,等按下回車鍵換行時才進行實際的i/o操作。典型代表是鍵盤輸入資料。

3、不帶緩衝

也就是不進行緩衝,標準出錯情況stderr是典型代表,這使得出錯資訊可以直接盡快地顯示出來。

緩衝區的重新整理

下列情況會引發緩衝區的重新整理:

1、緩衝區滿時;

2、執行flush語句;

3、執行endl語句;

4、關閉檔案。

可見,緩衝區滿或關閉檔案時都會重新整理緩衝區,進行真正的i/o操作。另外,在c++中,我們可以使用flush函式來重新整理緩衝區(執行i/o操作並清空緩衝區),如:

cout<

endl控制符的作用是將游標移動到輸出裝置中下一行開頭處,並且清空緩衝區。

cout<

關於cin , cout:

(1),注意

:>> 

是會過濾掉不可見字元(如 空格 回車,

tab 等)

(2),cin是用空格來分隔輸入的。請看看如下的例子:

#include

main()

執行輸出為:str=hello,為什麼?因為cin是以空格為分隔的,當你輸入乙個空格時,那他就認為後面的輸入不屬於這裡了,認為應該給後面的變數了。另外,當你輸入的字串大於分配的空間時,還會出現溢位現象。

/*按進製輸出的例子*/

cout<

cout.unsetf(ios::dec ); //取消十進位制輸出設定

cout.setf(ios::oct); //設定為八進位制輸出,此設定不取消一直有效

cout<

cout.unsetf(ios::oct); //取消八進位制輸出設定

cout.setf(ios::hex); //設定為十六進製制輸出,此設定不取消一直有效

cout《十六進製制輸出

cout.unsetf(ios::hex); //取消十六進製制輸出設定,恢復按十進位制輸出

cout《恢復按十進位制輸出

注意:在setf前一定要usetf。

/*使用填充,寬度,對齊方式的例子*/

#include

using namespace std;

int main()

/*操縱運算元來實現填充,寬度,對齊方式的例子*/

#include

using namespace std;

intmain()

/*關於浮點數的格式的例子*/

#include

using namespace std;

int main()

同樣,我們也一樣能用操縱運算元實現同樣的功能:

/*操縱運算元來實現浮點數的格式的例子*/

using namespace std;

intmain()

(4),幾個函式

1、cin.get() //字元需包含「#include」

2、cin.getline() //字串需包含「#include」

3、getline() //字串需包含「#include」

4、gets() //字串需包含「#include」

5、getchar() //字元需包含「#include」

1、cin.get()

用法1: cin.get(字元變數名)可以用來接收字元

#include

using namespace std;

main ()

請輸入第1個字串:

kskr1

請輸入第2個字串:

kskr2

請輸入第3個字串:

kskr3

輸出m[0]的值:kskr1

輸出m[1]的值:kskr2

輸出m[2]的值:kskr3

3、getline()// 接受乙個字串,可以接收空格並輸出,需包含「#include」

#include

#include

using namespace std;

main ()

請輸入第1個字串:

kskr1

請輸入第2個字串:

kskr2

請輸入第3個字串:

kskr3

輸出m[0]的值:kskr1

輸出m[1]的值:kskr2

輸出m[2]的值:kskr3

5、getchar()   

//接受乙個字元,需包含「#include」

#include

#include

using namespace std;

main ()

{char ch;

ch=getchar();                        //不能寫成getchar(ch);

cout《輸入:jkljkljkl

輸出:j

//getchar()是c語言的函式,c++也可以相容,但是盡量不用或少用;

C 學習筆記 輸入輸出

一 資料的輸入和輸出 1 字元輸入函式 getchar 例如 1 include2 include3 intmain 4 2 字元輸出 putchar 語法格式 1 putchar ch 其中,ch為乙個字元變數或常量。3 通過cout流輸出資料 格式1 cout 表示式 格式2 cout 表示式1...

C 輸入輸出

一 標準輸入函式cin 不知道說它是個函式對還是不對,它是代表標準的輸入裝置 鍵盤。他是屬於流的,他的用法和流的用法是一樣的。也就是 cin 變數 小小的說明一下,輸入多個變數可以寫在一行,如 cin x y z 這樣寫不是不允許,而是不好看,如果是不同的變數型別,那就更是沒頭沒腦了。除了你,人家是...

C 輸入輸出

c語言不提供輸入輸出語句,輸入輸出操作有函式來實現。c的標準庫函式中提供了許多輸入輸出函式,如printf scanf 等,使用時需要新增相應的標頭檔案 scanf d num 逗號前為控制語句,後半部分為變數的位址。當中 d是輸入格式控制字串 scanf 函式在接受輸入資料是預設不採集空格,回車,...