C++的輸入和輸出與標(biāo)準(zhǔn)輸出流

一、C++的I/O對C的發(fā)展—類型安全和可擴展性

C語言中I/O存在問題:

1、在C語言中,用prinff和scanf進行輸入輸出,往往不能保證所輸入輸出的數(shù)據(jù)是可靠的、安全的。學(xué)過C語言的讀者可以分析下面的用法:想用格式符%d輸出一個整數(shù),但不小心錯用了它輸出單精度變量和字符串,會出現(xiàn)什么情況?假定所用的系統(tǒng)int型占兩個字節(jié)。

printf(“%d”,i); //i為整型變量,正確,輸出i的值

printf(“%d”,f); //f為單精度變量,輸出變量中前兩個字節(jié)的內(nèi)容

printf(“%d”,”C++”);//輸出字符串”C++”的起始地址

2、在用scanf輸入時,有時出現(xiàn)的問題是很隱蔽的。如

scanf(“%d”,&i); //正確,輸入一個整數(shù),賦給整型變量i

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

假如已有聲明語句”int i=1”,定義i為整型變量,其初值為1。編譯系統(tǒng)不認(rèn)為上面的scanf語句出錯,而是將輸入的值存放到地址為000001的內(nèi)存單元中,這個錯誤可能產(chǎn)生嚴(yán)重的后果。

3、用printf和scanf可以輸出和輸入標(biāo)準(zhǔn)類型(如:int,float,double,char)的數(shù)據(jù),但無法輸出用戶自己聲明的類型(如數(shù)組、結(jié)構(gòu)體、類)的數(shù)據(jù)。在C++中,會經(jīng)常遇到對類對象的輸入輸出,顯然無法使用printf和scanf來處理。C++的I/O操作是可擴展的,不僅可以用來輸入輸出標(biāo)準(zhǔn)類型的數(shù)據(jù),也可以用于用戶自定義類型的數(shù)據(jù)。C++對標(biāo)準(zhǔn)類型的數(shù)據(jù)和對用戶聲明類型數(shù)據(jù)的輸入輸出,采用同樣的方法處理。顯然,在用戶聲明了一個新類后,是無法用printf和scanf函數(shù)直接輸出和輸入這個類的對象的。

解決辦法:

可擴展性是C++輸入輸出的重要特點之一,它能提高軟件的重用性,加快軟件的開發(fā)過程。

C++通過I/O類庫來實現(xiàn)豐富的I/0功能。這樣使C++的輸入輸出明顯地優(yōu)于C語言中的pfintf和scanf,但 是也為之付出了代價,C++的I/O系統(tǒng)變得比較復(fù)雜,要掌握許多細(xì)節(jié)。


http://blog.csdn.net/yunwu_gfalisa/article/details/53590547

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容