【正文】
n operator ()可以在同一語句中被多次使用:cout Hello, I am a C++ sentence。 上面這一行語句將會打印 Hello, I am a C++ sentence 到屏幕上。插入運算符() 的重復使用在我們想要打印變量和內容的組合內容或多個變量時有所體現(xiàn):cout Hello, I am age years old and my zipcode is zipcode。 如果我們假設變量age的值為24,變量zipcode的值為90064,以上句子的輸出將為: Hello, I am 24 years old and my zipcode is 90064 必須注意,除非我們明確指定,cout并不會自動在其輸出內容的末尾加換行符,因此下面的語句:cout This is a sentence.。cout This is another sentence.。 將會有如下內容輸出到屏幕:This is a is another sentence.雖然我們分別調用了兩次cout,兩個句子還是被輸出在同一行。所以,為了在輸出中換行,我們必須插入一個換行符來明確表達這一要求。在C++中換行符可以寫作\n:cout First sentence.\n 。cout Second sentence.\nThird sentence.。 將會產生如下輸出: First sentence.Second sentence.Third sentence. 另外,你也可以用操作符endl來換行,例如:cout First sentence. endl。cout Second sentence. endl。 將會輸出:First sentence.Second sentence. 當操作符endl被用在buffered streams中時有一點特殊:它們被flushed。不過cout 默認為unbuffered,所以不會被影響。 你可以暫時不管這一點。你可以使用\n或endl來指定cout輸出換行,請注意前面所講的兩者的不同用法。輸入Input (cin)C++中的標準輸入是通過在cin數(shù)據(jù)流上重載運算符extraction () 來實現(xiàn)的。它后面必須跟一個變量以便存儲讀入的數(shù)據(jù)。例如:int age。cin age。 聲明一個整型變量age然后等待用戶從鍵盤輸入到cin并將輸入值存儲在這個變量中。cin 只能在鍵盤輸入回車鍵(RETURN)后才能處理前面輸入的內容。因此即使你只要求輸入一個單獨的字符,在用戶按下回車鍵(RETURN)之前cin將不會處理用戶的輸入的字符。在使用cin輸入的時候必須考慮后面的變量類型。如果你要求輸入一個整數(shù),extraction () 后面必須跟一個整型變量,如果要求一個字符,后面必須跟一個字符型變量,如果要求一個字符串,后面必須跟一個字符串型變量。 // i/o exampleinclude int main (){int i。cout Please enter an integer value: 。cin i。cout The value you entered is i。cout and its double is i*2 .\n。return 0。} Please enter an integer value: 702The value you entered is 702 and its double is 1404. 使用程序的用戶可以使引起錯誤的原因之一,即使是在最簡單的需要用cin做輸入的程序中(就像我們上面看到的這個程序)。因為如果你要求輸入一個整數(shù)數(shù)值,而用戶輸入了一個名字(一個字符串),其結果可能導致程序產生錯誤操作,因為它不是我們期望從用戶處獲得的數(shù)據(jù)。當你使用由cin 輸入的數(shù)據(jù)的時候,你不得不假設程序的用戶將會完全合作而不會在程序要求輸入整數(shù)的時候輸入他的名字。后面當我們看到怎樣使用字符串的時候,我們將會同時看到一些解決這一類出錯問題的辦法。你也可以利用cin 要求用戶輸入多個數(shù)據(jù) :cin a b。 等同于:cin a。cin b。 在以上兩種情況下用戶都必須輸入兩個數(shù)據(jù),一個給變量a,一個給變量b。輸入時兩個變量之間可以以任何有效的空白符號間隔,包括空格,跳躍符tab或換行。cin和字符串我們可以像讀取基本類型數(shù)據(jù)一樣,使用cin和操作符來讀取字符串,例如:cin mystring。但是,cin 只能讀取一個單詞,一旦碰到任何空格,讀取操作就會停止。在很多時候這并不是我們想要的操作,比如我們希望用戶輸入一個英文句子,那么這種方法就無法讀取完整的句子,因為一定會遇到空格。要一次讀取一整行輸入,需要使用C++的函數(shù) getline,相對于是用cin,我們更建議使用getline來讀取用戶輸入。例如:// 讀取字符串例子include iostreaminclude stringusing namespace std。int main (){ string mystr。 cout What39。s your name? 。 getline (cin, mystr)。 cout Hello mystr .\n。 cout What is your favorite color? 。 getline (cin, mystr)。 cout I like mystr too!\n。 return 0。} What39。s your name? AquaHello Aqua.What is your favorite color? blueI like blue too!你可能注意到在上面的例子中,兩次調用 getline 函數(shù)我們都是用了同一個字符串變量(mystr)。在第二次調用的時候,程序會自動用第二次輸入的內容取代以前的內容。字符串流?。ǎ螅簦颍椋睿纾螅簦颍澹幔恚藴暑^文件 sstream 定義了一個叫做 stringstream 的類,使用這個類可以對基于字符串的對象進行像流(stream)一樣的操作。這樣,我們可以對字符串進行抽取和插入操作,這對將字符串與數(shù)值互相轉換非常有用。例如,如果我們想將一個字符串轉換為一個整數(shù),可以這樣寫:string mystr (1204)。int myint。stringstream(mystr) myint。這個例子中先定義了一個字符串類型的對象mystr,初始值為1204,又定義了一個整數(shù)變量myint。然后我們使用 stringstream 類的構造函數(shù)定義了這個類的對象,并以字符串變量mystr為參數(shù)。因為我們可以像使用流一樣使用stringstream 的對象,所以我們可以像使用cin那樣使用操作符 后面跟一個整數(shù)變量來進行提取整數(shù)數(shù)據(jù)。這段代碼執(zhí)行之后變量 myint 存儲的是數(shù)值 1204 。// 字符串流的使用示例include iostreaminclude stringinclude sstreamusing namespace std。int main (){ string mystr。 float price=0。 int quantity=0。 cout Enter price: 。 getline (cin,mystr)。 stringstream(mystr) price。 cout Enter quantity: 。 getline (cin,mystr)。 stringstream(mystr) quantity。 cout Total price: price*quantity endl。 return 0。} Enter price: Enter quantity: 7Total price: 在這個例子中,我們要求用戶輸入數(shù)值,但不同于從標準輸入中直接讀取數(shù)值,我們使用函數(shù)getline從標注輸入流cin中讀取字符串對象(mystr),然后再從這個字符串對象中提取數(shù)值price和quantity。通過使用這種方法,我們可以對用戶的輸入有更多的控制,因為它將用戶輸入與對輸入的解釋分離,只要求用戶輸入整行的內容,然后再對用戶輸入的內容進行檢驗操作。這種做法在用戶輸入比較集中的程序中是非常推薦使用的。第二章 控制結構和函數(shù) (Control structures and Functions )1. 控制結構 Control Structures 2. 函數(shù)I Functions I 3. 函數(shù)II Functions II 控制結構(Control Structures)一個程序的語句往往并不僅限于線性順序結構。在程序的執(zhí)行過程中它可能被分成兩支執(zhí)行,可能重復某些語句,也可能根據(jù)一些判斷結果而執(zhí)行不同的語句。因此C++ 提供一些控制結構語句 (control structures) 來實現(xiàn)這些執(zhí)行順序。為了介紹程序的執(zhí)行順序,我們需要先介紹一個新概念:語句塊(block of instructions)。一個語句塊(A block of instructions) 是一組互相之間由分號semicolons (。) 分隔開但整體被花括號curly bracket signs: { and }括起來的語句。本節(jié)中我們將看到的大多數(shù)控制結構允許一個通用的statement做參數(shù),這個statement根據(jù)需要可以是一條語句,也可以是一組語句組成的語句塊。如果我們只需要一條語句做statement,它可以不被括在花括號 ({}) 內。但如果我們需要多條語句共同做statement,則必須把它們括在花括號內 ({}) 以組成一個語句塊。條件結構Conditional structure: if and else條件結構用來實現(xiàn)僅在某種條件滿足的情況下才執(zhí)行一條語句或一個語句塊。它的形式是:if (condition) statement 這里 condition 是一個將被計算的表達式(expression)。如果表達式值為真,即條件(condition)為true,statement 將被執(zhí)行。否則,statement 將被忽略(不被執(zhí)行),程序從整個條件結構之后的下一條語句繼續(xù)執(zhí)行。例如,以下程序段實現(xiàn)只有當變量x存儲的值確實為100的時候才輸出x is 100:if (x == 100)cout x is 100。 如果我們需要在條件condition為真true的時候執(zhí)行一條以上的語句,我們可以花括號{}將語句括起來組成一個語句塊:if (x == 100){cout x is 。cout x。} 我們可以用關鍵字else 來指定當條件不能被滿足時需要執(zhí)行的語句,它需要和if 一起使用,形式是:if (condition) statement1 else statement2 例如:if (x == 100)cout x is 100。elsecout x is not 100。 以上程序如果x的值為100,則在屏幕上打出x is 100,如果x不是100,而且也只有在x不是100的時候,屏幕上將打出x is not 100。多個if + else 的結構被連接起來使用來判斷數(shù)值的范圍。以下例子顯示了如何用它來判斷變量 x中當前存儲的數(shù)值是正值,負值還是既不正也不負,即等于0 。if (x 0)cout x is positive。else if (x 0)cout x is negative。elsecout x is 0。 記住當我們需要執(zhí)行多條語句時,必須使用花括號{}將它們括起來以組成一個語句塊block of instructions。重復結構 Iteration structures 或循環(huán)loops循環(huán)Loops 的目的是重復執(zhí)行一組語句一定的次數(shù)或直到滿足某種條件。while 循環(huán)格式是:while (表達式expression) 語句statement 它的功能是當expression 的值為真true時重復執(zhí)行statement。例如,下面我們將用while循環(huán)來寫一個倒計數(shù)程序:// custom countdown using whileinclude int main (){int n。cout Enter the starting number 。cin n。while (n0) {cout n , 。n。}cout FIRE!。return 0。} Enter the starting number 88, 7, 6, 5, 4, 3, 2, 1, FIRE! 程序開始時提示用戶輸入一個倒計數(shù)的初始值。然后while 循環(huán)開始,如果用戶輸入的數(shù)值滿足條件n0 (即 n 比0 大),后面跟的語句塊將會被執(zhí)行一定的次數(shù),直到條件 (n0) 不再滿足(變?yōu)閒alse)。以上程序的所有處理過程可以用以下的描述來解釋:從main開始:1. 用戶輸入一個數(shù)值賦給n. 2. while語句檢查(n0)是否成立,這時有兩種可能: o true: 執(zhí)行statement (到第3步) o false: 跳過statement. 程序直接執(zhí)行第5步. 3. 執(zhí)行statement