了解一下C 輸入和輸出的概念

2022-09-03 21:45:26 字數 2025 閱讀 9596

我們經常用到的輸入和輸出,都是以終端為物件的,即從鍵盤輸入資料,執行結果輸出到顯示器螢幕上。從作業系統的角度看,每乙個與主機相連的輸入輸出裝置都被看作乙個檔案。除了以終端為物件進行輸入和輸出外,還經常用磁碟(光碟)作為輸入輸出物件,磁碟檔案既可以作為輸入檔案,也可以作為輸出檔案。

程式的輸入指的是從輸入檔案將資料傳送給程式,程式的輸出指的是從程式將資料傳送給輸出檔案。

c++輸入輸出包含以下三個方面的內容

:對系統指定的標準裝置的輸入和輸出。即從鍵盤輸入資料,輸出到顯示器螢幕。這種輸入輸出稱為標準的輸入輸出,簡稱標準i/o。

以外存磁碟檔案為物件進行輸入和輸出,即從磁碟檔案輸入資料,資料輸出到磁碟檔案。以外存檔案為物件的輸入輸出稱為檔案的輸入輸出,簡稱檔案i/o。

對記憶體中指定的空間進行輸入和輸出。通常指定乙個字元陣列作為儲存空間(實際上可以利用該空間儲存任何資訊)。這種輸入和輸出稱為字串輸入輸出,簡稱串i/o。

c++採取不同的方法來實現以上種輸入輸出。為了實現資料的有效流動,c++系統提供了龐大的i/o類庫,呼叫不同的類去實現不同的功能。

在c語言中,用printf和scanf進行輸入輸出,往往不能保證所輸入輸出的資料是可靠的安全的。在c++的輸入輸出中,編譯系統對資料型別進行嚴格的檢查,凡是型別不正確的資料都不可能通過編譯。因此c++的i/o操作是型別安全(type safe)的。c++的i/o操作是可擴充套件的,不僅可以用來輸入輸出標準型別的資料,也可以用於使用者自定義型別的資料。c++對標準型別的資料和對使用者宣告型別資料的輸入輸出,採用同樣的方法處理。c++通過i/o類庫來實現豐富的i/o功能。c++的輸入輸出優於c語言中的printf和scanf,但是比較複雜,要掌握許多細節。

在c語言中,用primf和scanf進行輸人輸出,往往不能保證所輸入輸出的資料是可靠的、安全的。學過c語言的讀者可以分析下面的用法,想用格式符%d輸出乙個整數, 但不小心用它輸出了單精度變數和字串,會出現什麼情況?假定所用的系統int型佔兩個位元組。

printf("%d", i);  // i為整型變數,正確,輸出i的值

printf("%d", f);  // f為單精度變數,輸出f變數中前兩個位元組的內容

printf("%d", "c++");  //輸出宇符串"c++"的位址

編譯系統認為以上語句都是合法的,而不對資料型別的合法性進行檢查,顯然所得到的結果不是人們所期望的,在用scanf 輸入時,有時出現的問題是很隱蔽的。如:

scanf("%d", &i);  //正確,輸入乙個整數,賦給整型變數i

scanf("%d", i);  //漏寫&

假如已有宣告語句「int i = 1; 」,定義i為整型變數,其初值為1。編譯系統不認為上面的scanf語句出錯,而是將輸人的值存放到位址為000001的記憶體單元中,這個錯誤可能產生嚴重的後果。

c++為了與c相容,保留了用printf和scanf進行輸出和輸人的方法,以便使過去所編寫的大量的c程式仍然可以在c ++的環境下執行,但是希望讀者在編寫新的c ++程 序時不要用c的輸入輸出機制,而要用c++自己特有的輸人輸出方法。在c++的輸入輸出中,編譯系統對資料型別進行嚴格的檢查,凡是型別不正確的資料都不可能通過編譯。因此c++的i/o操作是型別安全(type safe)的。

此外,用printf和scanf可以輸出和輸入標準型別的資料(如int、float、double、char), 但無法輸出使用者自己宣告的型別(如陣列、結構體、類

)的資料。在c++中,會經常遇到對類物件的輸人輸出,顯然無法使用printf和scanf來處理。c++的i/o操作是可擴充套件 的,不僅可以用來輸人輸出標準型別的資料,也可以用於使用者自定義型別的資料。c++對標準型別的資料和對使用者宣告型別資料的輸人輸出,採用同樣的方法處理。顯然,在使用者宣告了乙個新類後,是無法用printf和scanf 函式直接輸出和輸人這個類的物件的。

可擴充套件性是c++輸人輸出的重要特點之一,它能提高軟體的重用性,加快軟體的開 發過程。

c++通過i/o類庫來實現豐富的i/o功能。這樣使c++的輸人輸出明顯地優於c 語言中的printf和scanf,但是也為之付出了代價,c++的i/o系統變得比較複雜,要掌握許多細節。在本章中只能介紹其基本的概念和基本的操作,有些具體的細節可在日後實際深入應用時再進一步掌握。

了解一下C 的析構函式

我不是寫部落格的,我只是部落格的搬運工。是寫還是不寫呢,好像沒什麼用呀。其實我感覺 c primer 裡面對於析構函式講解的不是很詳細,總感覺析構函式的知識點不止這麼多呀 可能我看的不仔細吧 這裡糾正一下,之前我用的是vs2017的空專案,用system pause 來暫停控制台,導致了析構函式的列...

簡單了解一下c編譯過程

大一的時候,學習c 語言,用的是 vc6.0 用了1 年多,到後來了解了 linux 知道了 gcc編譯器,開始使用 gcc hello.c o a.out 這樣的命令進行編譯。後來又學了 gcc的一些其他的命令,不同的命令可以編譯出不同的目標 現在想想類似於 vc這種 ide雖然方便,但是對於具體...

c語言 初步了解一下指標

指標的基本概念 在計算機中,所有的資料都是存放在儲存器中的.一般把儲存器中的乙個位元組稱為乙個記憶體單元,不同的資料型別所占用的記憶體單元數不等,如整形量佔2個單元,字元量佔1個單元等。為了正確地訪問這些記憶體單元,必須為每個記憶體單元編上號。根據乙個記憶體單元的編號即可準確地找到該記憶體單元。記憶...