C 零基礎入門學習(cout cin)

2022-04-11 10:14:08 字數 3375 閱讀 9470

c++程式語言互換流中的標準輸出流,需要iostream.h支援。讀為 "c out"。

目錄使用範例

案例分析

技巧應用

cout控制符

其他資訊

使用範例#include

using namespace std;

int main()

使用者輸入的數字由cin儲存於變數a中,並通過cout輸出。

#include

using namespace std;

int main()

// hello world 示例

案例分析由於以前學過c,所以這段**的其它部分在我看來都還算「正常」,然而cout卻很獨特:既不是函式,似乎也不是c++特別規定出來的像if,for一類有特殊語法的「語句」。由於只是初步介紹,所以那本書只是簡單的說cout是c++中的「標準輸入輸出流」物件……這於我而言實在是乙個很深奧的術語。這還沒完,之後又遇見了cin……因為不知底細,從此使用它們的時候都誠惶誠恐,幾欲逃回c時代那簡明的printf(),畢竟好歹我可以說:我在呼叫的是乙個函式。那有著一長串<>的玩意,究竟算怎麼回事呢?我一直想把它們當作關鍵字,可偏偏不是,而且居然是用c++語言「做」出來的,呵!但printf()用多了就開始有人好心地批判我的程式「c語言痕跡過重」……

後來隨著學習的深入,總算大概明白了cout/cin/cerr/...的鬼把戲:那些東東不過是變著法兒「哄人」,其實說到底還是函式呼叫,不過這函式有些特殊,用的是運算子過載,確切地說(以下還是以cout為例)是過載了「<

#include

using namespace std;

int main()

編譯執行,結果與經典版無二。上面程式應該更容易理解了:cout是乙個iostream類的物件,它有乙個成員運算子函式operator<

我想你現在已經猜到了,沒錯,就是用運算子過載。運算子函式與一般函式基本無異,可以任意過載。標準庫的設計者們早已經為我們定製了iostream::operator

cout.operator<

才算「強等效」。究竟可不可以這樣寫?向編譯器確認一下……ok,noproblem!

技巧應用嗯,我們已經基本上看出了cout的實質,現在不妨動動手,自己來實現乙個cout的簡化版(lite),為了區分,我們把我們設計的cout物件命名的myout,myout物件所屬的類為myoutstream。我們要做的就是為myoutstream類過載一系列不同型別的operator

#include//在c和一些古老的c++中是stdio.h,新標準為了使標準庫

//的標頭檔案與使用者標頭檔案區別開,均推薦使用不用副檔名

//的版本,對於原有c庫,不用副檔名時頭檔名前面要加c

class myoutstream

;const myoutstream& myoutstream::operator<

const myoutstream& myoutstream::operator<

myoutstream myout;//隨時隨地為我們服務的全域性物件myout

int main()

我們定義的myout已經初具形態,可以為我們工作了。程式中的注釋指出兩處要我們特別注意的:即是operator

還記得那個有點奇異的cout.operator<

cout<

而不是cout<

cout<

為何它可以這樣連起來寫?我們分析一下:按執行順序,系統首先呼叫cout.operator<

再注意一下main函式中最激動人心的那一行:

myout<

我們知道,最後出現的"\n"可以實現乙個換行,不過我們在用c++時教程中總是有意無意地讓我們使用endl,兩者看上去似乎一樣——究竟其中有什麼玄妙?查書,書上說endl是乙個操縱符(manipulator),它不但實現了換行操作,而且還對輸出緩衝區進行重新整理。什麼意思呢?原來在執行輸出操作之後,資料並非立刻傳到輸出裝置,而是先進入乙個緩衝區,當適宜的時機(如裝置空閒)後再由緩衝區傳入,也可以通過操縱符flush,ends,或unitbuf進行強制重新整理:

cout<

這樣當程式執行到operator<

不過可能在螢幕上顯示是手動重新整理與否區別看來都不大。但對於檔案等輸出物件就不大一樣了:過於頻繁的重新整理意味著老是寫盤,會影響速度。因此通常是寫入一定的位元組數後再重新整理,如何操作?靠的就是這些操縱符。

cout控制符控制符 描 述

dec 置基數為10

hex 置基數為16

oct 置基數為8

setfill(c) 設填充字元為c

setprecision(n) 設定實數的精度為n位

setw(n) 設域寬為n個字元

setiosflags(ios::fixed) 固定的浮點顯示

setiosflags(ios::scientific) 指數表示

setiosflags(ios::left) 左對齊

setiosflags(ios::right) 右對齊

setiosflags(ios::skipws) 忽略前導空白

setiosflags(ios::uppercase)16進製制數大寫輸出

setiosflags(ios::lowercase)16進製制數小寫輸出

其他資訊c++的iostream家族

好了,說了這麼多,c++的iostream家族與c的printf/scanf家庭相比究竟有何優勢?首先是型別處理更安全、智慧型,想想printf中對付int、float等的"%d"、"%f"等說明符真是多餘且麻煩,萬一用錯了搞不好還會死掉;其次是擴充套件性更強:我要是新定義乙個複數類complex,printf對其是無能為力,最多只能分別輸出實、虛部,而iostream使用的<>操作符都是可過載的,你只要過載相關的運算子就可以了;而且流風格的寫法也比較自然簡潔,不是麼?cin

c++程式語言互換流中的標準輸入流,需要iostream.h支援,及開始的時候,要有#include (新版本編譯器為#include )讀為 "see in",拼音"si yin",

cin代表標準輸入裝置,使用提取運算子 ">>" 從裝置鍵盤取得資料,送到輸入流物件cin中,然後送到記憶體。使用cin可以獲得多個從鍵盤的輸入值,其具體使用格式如下:

cin >> 表示式1 >>表示式2...>> 表示式n;

使用範例:

#include

int main()

使用者輸入的數字由cin儲存於變數a中,並通過cout輸出。

#include

using namespace std;

int main()

/*goodbit==0 無錯誤正常

badbit==1 有致命錯誤無法挽回

eofbit=2 檔案結束

failbit=4 輸入錯誤 可以挽回 後面說明

*/#include

using namespace std;

int main()

零基礎入門學習Python

課程介紹 前半部分主要講解python3的語法特性,後半部分著重講解python3在爬蟲 tkinter pygame遊戲開發等例項上的應用。整個系列共16個章節,前邊13個章節從乙個小遊戲引入python,逐步介紹python的語法以及語言特色。最後3個章節為案例的演示,是前邊內容的總結和提高。課...

零基礎入門學習python

1.從idie啟動python idle是乙個python shell,shell的意思就是 外殼 從基本上說,就是乙個通過輸入本與程式互動的途徑。像windows的cmd的視窗,像linux那個黑乎乎的命令視窗,它們都是shell,利用它們,就可以給作業系統下達命令。同樣,可以利用idle這個sh...

零基礎入門學習C 002

一 基本內建型別 算數型別 對應空型別 注 型別還可分為 帶符號型別 無符號型別 型別轉換 略 字面值常量 略二 變數 變數定義 略 變數宣告和定義的關係 略註 變數只可以定義一次,卻可以宣告多次。識別符號 略 名字的作用域 略三 復合型別 引用 include void swapr int a,i...