- 算法訓練營:海量圖解+競賽刷題(入門篇)
- 陳小玉
- 1348字
- 2021-07-23 18:16:26
1.3 玩轉輸入輸出
標準輸入輸出流的對象和操作方法都是由istream和ostream兩個類提供的,這兩個類繼承自ios基類,它們預定義了標準輸入輸出流對象,并且提供了多種形式的輸入輸出功能。C++在進行輸入時需要從流中提取數(shù)據(jù),在輸出時需要向流中插入數(shù)據(jù),提取和插入是通過在流類庫中重載“>>”和“<<”運算符實現(xiàn)的。
1. cin
cin是istream類的對象,用于處理標準輸入(即鍵盤輸入);cout是ostream類的對象,用于處理標準輸出(即屏幕輸出)。cin與提取運算符“>>”結合使用,cout與插入運算符“<<”結合使用,完成了C++中的輸入輸出操作。
cin從標準輸入設備(鍵盤)中獲取數(shù)據(jù),通過提取運算符“>>”從流中提取數(shù)據(jù),然后發(fā)送給cin對象,由cin對象將數(shù)據(jù)發(fā)送到指定的地方。cin是帶緩沖區(qū)的輸入流對象,只有在輸入完數(shù)據(jù)并按下回車鍵后,該行數(shù)據(jù)才被送入鍵盤緩沖區(qū),形成輸入流,提取運算符“>>”才能從中提取數(shù)據(jù)。例如:

此時若從鍵盤上輸入10,則10只是被存入緩沖區(qū),并不能被“>>”運算符提取,按下回車鍵后,緩沖區(qū)中的內容才被刷新成輸入流,被“>>”運算符提取后傳遞給cin對象,由cin對象發(fā)送到變量a中存儲。
從流中讀取數(shù)據(jù)要保證能正常進行。例如,如果針對以上代碼,從鍵盤上輸入字符串“abc”,則進行提取操作會失敗,此時cin流被置為出錯狀態(tài),因為變量a是int類型。只有在正常狀態(tài)時才能從輸入流中提取數(shù)據(jù),這也是C++ I/O的安全性體現(xiàn)。
除了單個變量讀取,cin對象也可以一次性讀入多個變量的值,因為“>>”運算符返回的是istream的引用,所以可連續(xù)提取數(shù)據(jù)。例如:

若從鍵盤輸入1 2,上面的cin語句就會把輸入的1發(fā)送給變量a,把輸入的2發(fā)送給變量b。當輸入多個數(shù)值時,要在數(shù)值之間加空格以示區(qū)分,cin讀到空格時,就能夠區(qū)分輸入的各個數(shù)值。除了在輸入的數(shù)據(jù)之間加空格,也可以在每輸入一個數(shù)據(jù)后都按回車鍵或Tab鍵,這樣就可以正確地讀入數(shù)據(jù)了。
也可以采用cin對象一次性讀入多個不同類型的變量值。例如:

當從鍵盤正確輸入字符串和float類型的值時,cin會將它們分別存儲到對應變量中。
讀入字符串后,也可以采用字符數(shù)組存儲字符串。例如:

如果用一個字符數(shù)組存儲字符串,則要確保輸入的字符串不超出字符數(shù)組的大小,否則會發(fā)生溢出,破壞內存中的其他數(shù)據(jù)。
2. cout
cout是ostream類的對象,對應的標準設備為屏幕,叫作標準輸出對象或屏幕輸出對象,但也可被重定向輸出到磁盤文件。用戶可以通過cout對象調用ostream類的插入運算符和成員函數(shù)來輸出信息。
(1)利用cout對象可以直接輸出常量值。在輸出常量值時,直接將要輸出的內容放在“<<”運算符后面即可。例如:

(2)利用cout對象輸出變量的值。在用cout輸出變量值時,不必設置以什么格式輸出,“<<”運算符會根據(jù)變量的數(shù)據(jù)類型自動調用相匹配的重載函數(shù)來正確輸出,這比C語言中的printf()函數(shù)的用法更簡便。例如:

(3)利用cout對象輸出指針、引用類型的數(shù)據(jù)。當輸出數(shù)據(jù)為指針或引用類型時,與printf()函數(shù)的用法一致,不帶“*”符號輸出的是指針的值,即變量的地址;帶“*”符號輸出的是指針指向的變量的值。它比printf()函數(shù)簡便之處在于不必設置數(shù)據(jù)的輸出格式。例如:

(4)cout對象可以連續(xù)輸出數(shù)據(jù)。例如:

訓練1-1:輸入圓的半徑r,輸出其周長和面積。

3. 浮點數(shù)精度、域寬、填充
對于浮點數(shù),可以設置精度,控制輸出的位數(shù);也可以設置域寬,控制輸出占多少位;還可以用字符填充,如下表所示。進行這些操作時需要引入頭文件#include <iomanip>。

訓練1-2:將2.0開平方后設置不同的精度和寬度輸出。

4. 輸出格式
在輸出時,可以控制輸出的進制和換行,如下表所示。

在輸出時,還可以控制左右對齊、科學記數(shù)法等,如下表所示。

5. 常用的運算符
常用的運算符及其作用如下表所示。

(1)常用的算術運算符及其運算、范例、結果如下表所示。

訓練1-3:輸入一個三位數(shù),輸出其個位、十位、百位上的數(shù)字。

(2)常用的賦值運算符及其運算、范例、結果如下表所示。

(3)常用的關系運算符及其運算、范例、結果如下表所示。關系運算符用于對兩個數(shù)值或變量進行比較,其結果是一個邏輯值(“真”或“假”)。

(4)常用的邏輯運算符及其運算、范例、結果如下表所示。邏輯運算符用于判斷數(shù)據(jù)的真假,其結果為“真”或“假”。

注意:千萬不要將“==”運算符寫成賦值運算符“=”。例如,不能將if(a==b)寫成if(a=b),雖然系統(tǒng)不會有錯誤提示,卻存在邏輯錯誤。
優(yōu)先級如下:
? “&&”優(yōu)先級高于“||”;
? “&&”“||”優(yōu)先級低于關系運算;
? “!”優(yōu)先級高于所有關系運算和算術運算。
訓練1-4:輸入3個整數(shù),分別輸出其增加1、擴大10倍、縮小10倍的結果。

- Practical Data Analysis Cookbook
- Java多線程編程實戰(zhàn)指南:設計模式篇(第2版)
- JavaScript修煉之道
- Learning Docker
- C和C++安全編碼(原書第2版)
- Web交互界面設計與制作(微課版)
- 數(shù)據(jù)結構與算法JavaScript描述
- Oracle Database 12c Security Cookbook
- Reactive Programming With Java 9
- 名師講壇:Spring實戰(zhàn)開發(fā)(Redis+SpringDataJPA+SpringMVC+SpringSecurity)
- Unity 3D/2D移動開發(fā)實戰(zhàn)教程
- Python Data Science Cookbook
- C++ Fundamentals
- Backbone.js Testing
- 精通Spring:Java Web開發(fā)與Spring Boot高級功能