_淺談cin&cout

       在C語言中,我們常用scanf和printf函數來進行輸入和輸出,scanf和printf是庫函數,在使用時要包含頭文件<stdio.h>。

       例如,我們常常編寫這樣的函數:

        如上的程序奔潰了,爲什麼呢?因爲我們的數組中只能包含30個字符,但是我們在輸入的時候輸入了超過30個字符,在我們不知道數組大小的情況下,這樣的代碼是很危險的,就是說,scanf函數是不安全的。

        也許讀者會馬上想到fgets函數:

fgets函數不但能夠從我們輸入的超過數組最大值的一段數據中截取29個字符,還能接受小於29個字符的數據:


在C++中爲了解決scanf不安全的問題,發明了string字符串類型。

       可以看到string的顏色和int的顏色是不一樣的,因爲string是一個類對象。我們還可以看到string的最大值是1073741820,這個值足以大到一天都輸不完。


在C語言的輸入輸出中對數據的類型有着嚴格的格式控制,相比C++來說是很不方便的:

       使用scanf函數,在給兩個不同的變量賦值的時候我們常常用空格或Tab隔開,這樣a和b分別被賦值1和2,但是在下面這種情況裏:

       我們可以看到輸入的d被喫掉了,因爲空格也是一個字符,被賦給了d。

       我們來看看C++中的cin:

cin函數沒有把空格賦給c,而是把我們輸入的d賦給了c。


關於cout的格式控制:

       C語言中printf函數裏的格式控制功能很強大,例如設置域寬及位數,按進制輸出等,當然C++中也有這樣的格式化控制,只是有點複雜而已。


1.設置域寬及位數

       setw設置了位寬,效果和printf函數裏%5d一樣。setprecision(n)能夠設置有效位數,setprecision(n)和setiosflags(ios::fixed)一起使用能夠設置小數點後的有效位數。


2.按進制輸出

int i = 100;

cout<<dec<<i<<endl;//十進制

cout<<oct<<i<<endl;//八進制

cou<<hex<<i<<endl;//十六進制

默認輸出十進制。


3.設置填充符



        

                                                                                                                    Kyrie Irving___全.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章