c tutorial 六 基本輸入 輸出

2021-09-03 06:19:41 字數 4715 閱讀 4809

基本輸入/輸出

前面部分的示例程式提供了與使用者的很少互動,如果有的話。它們只是在螢幕上列印簡單值,但標準庫提供了許多通過其輸入/輸出功能與使用者互動的其他方法。本節將簡要介紹一些最有用的內容。

c ++使用一種稱為流的方便抽象來在順序**(如螢幕,鍵盤或檔案)中執行輸入和輸出操作。流是乙個程式可以插入或提取字元的實體。無需了解與流相關的**或其任何內部規範的詳細資訊。我們需要知道的是,流是字元的源/目的地,並且這些字元是順序提供/接受的(即,乙個接乙個地)。

標準庫定義了一些流物件,可用於訪問程式執行環境中被視為字元的標準源和目標的內容:

流	描述

cin 標準輸入流

cout 標準輸出流

cerr 標準錯誤(輸出)流

clog 標準日誌記錄(輸出)流

我們將詳細只看到cout和cin(標準輸出和輸入流); cerr並且clog也是輸出流,因此它們基本上是一樣的cout,唯一的區別是它們為特定目的識別流:錯誤訊息和記錄; 在許多情況下,在大多數環境設定中,它們實際上完全相同:它們在螢幕上列印,儘管它們也可以單獨重定向。

標準輸出(cout)

在大多數程式環境中,預設情況下標準輸出是螢幕,並且定義為訪問它的c ++流物件是cout。

對於格式化輸出操作,cout與插入操作符一起使用,寫入為<<(即兩個「小於」符號)。

cout << "output sentence"; // prints output sentence on screen

cout << 120; // prints number 120 on screen

cout << x; // prints the value of x on screen

所述《操作者將它後面到它前面的流的資料。在上面的示例中,它將文字字串output sentence,數字120和變數值x插入到標準輸出流中cout。請注意,第乙個語句中的句子用雙引號(")括起來,因為它是乙個字串文字,而在最後乙個中x則不是。雙引號是造成差異的原因; 當文字被包含在它們之間時,文字按字面列印; 當它們不是時,文字被解釋為變數的識別符號,而是列印其值。例如,這兩個句子的結果非常不同:

cout << "hello";  // prints hello

cout << hello; // prints the content of variable hello

cout << "this " << " is a " << "single c++ statement";
cout << "i am " << age << " years old and my zipcode is " << zipcode;
假設age變數包含值24且zipcode變數包含90064,則前一語句的輸出將是:

i am 24 years old and my zipcode is 90064

cout不會自動執行的操作是在末尾新增換行符,除非指示這樣做。例如,將以下兩個語句插入cout:

cout <<「這是乙個句子。」;

cout <<「這是另一句話。」;

輸出將在一行中,兩者之間沒有任何換行符。類似於:

this is a sentence.this is another sentence.

要插入換行符,應在行應斷開的確切位置插入換行符。在c ++中,可以將換行符指定為\n(即反斜槓字元後跟小寫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』\n』coutendl』\n』

標準輸入(cin)

在大多數程式環境中,預設情況下標準輸入是鍵盤,而定義為訪問它的c ++流物件是cin。

對於格式化的輸入操作,cin與提取操作符一起使用,該操作符被寫為》(即,兩個「大於」符號)。然後,該運算子後跟儲存提取資料的變數。例如:

int age;

cin >> age;

第乙個語句宣告乙個int被呼叫型別的變數,第二個語句age從cin乙個值中提取要儲存在其中。此操作使程式等待輸入cin; 通常,這意味著程式將等待使用者使用鍵盤輸入一些序列。在這種情況下,請注意使用鍵盤引入的字元僅在按下enter(或return)鍵時傳輸到程式。一旦cin達到提取操作的語句,程式將等待所需的時間,直到引入一些輸入。

提取操作後cin使用變數的型別》運算子,用於確定它如何解釋從輸入中讀取的字元; 如果它是乙個整數,則期望的格式是一系列數字,如果字串是一系列字元,等等。

// i/o example

#include using namespace std;

int main ()

正如您所看到的,從中提取cin似乎使得從標準輸入獲取輸入的任務變得非常簡單和直接。但這種方法也有很大的缺點。如果使用者輸入了無法解釋為整數的其他內容,上面的示例會發生什麼?那麼,在這種情況下,提取操作失敗。預設情況下,這使程式繼續執行而不設定變數i值,如果i稍後使用該值,則會產生未確定的結果。

這是非常糟糕的程式行為。無論使用者型別如何,大多數程式都應以預期的方式執行,並適當地處理無效值。只有非常簡單的程式才能依賴直接提取的值cin而無需進一步檢查。過了一會兒,我們會看到如何stringstreams可用於更好地控制使用者輸入。

提取cin也可以鏈結在乙個語句中請求多個資料:

cin >> a >> b;

這相當於:

cin >> a;

cin >> b;

在這兩種情況下,使用者都需要引入兩個值,乙個用於變數a,另乙個用於變數b。任何型別的空間用於分隔兩個連續的輸入操作; 這可以是空格,製表符或換行符。

cin和字串

提取運算子可用於cin獲取與基本資料型別相同的字串:

string mystring;

cin >> mystring;

但是,cin提取總是將空格(空格,製表符,換行符…)視為終止要提取的值,因此提取字串意味著始終提取單個單詞,而不是短語或整個句子。

為了獲得整行cin,有乙個函式,稱為getline,將stream(cin)作為第乙個引數,將字串變數作為第二個引數。例如:

// cin with strings

#include #include using namespace std;

int main ()

你叫什麼名字?荷馬辛普森

你好荷馬辛普森。

你最喜愛的隊伍是什麼?同位素

我也喜歡the isotopes!

編輯並執行

請注意,在兩次呼叫中getline,我們使用相同的字串識別符號(mystr)。程式在第二次呼叫中所做的只是將之前的內容替換為引入的新內容。

大多數使用者期望從控制台程式獲得的標準行為是,每次程式向使用者查詢輸入時,使用者都會引入該欄位,然後按enter(或return)。也就是說,通常期望輸入根據控制台程式上的行發生,並且這可以通過使用getline來獲得來自使用者的輸入來實現。因此,除非你有充分的理由不這樣做,否則你應該總是使用getline在控制台程式中獲取輸入而不是從中提取cin。

字串流

標準頭定義了一種型別,稱為stringstream允許將字串視為流,從而允許從/向字串提取或插入操作的方式與執行cin和執行相同cout。此功能對於將字串轉換為數字值非常有用,反之亦然。例如,為了從字串中提取整數,我們可以寫:

string mystr (「1204」);

int myint;

stringstream(mystr) >> myint;

這宣告了乙個string初始化為值的值"1204"和乙個型別的變數int。然後,第三行使用此變數stringstream從字串構造中提取。這段**將數值儲存在1204名為的變數中myint。

// stringstreams

#include

#include

#include

using namespace std;

int main ()

在這個例子中,我們間接從標準輸入中獲取數值:不是直接從中提取數值cin,而是從它獲取行到字串物件(mystr),然後我們從這個字串中提取值到變數price和quantity。一旦這些是數值,就可以對它們執行算術運算,例如將它們相乘以獲得總**。

通過這種獲取整行和提取內容的方法,我們將獲取使用者輸入的過程與其作為資料的解釋分開,允許輸入過程成為使用者期望的過程,同時獲得對其轉換的更多控制。通過程式將內容轉換為有用的資料。

Linux shell shell的輸入與輸出

大多數使用標準輸入的命令都指定乙個檔案作為標準輸入 1.echo echo hello word 將輸出hello word 如果想把hello word輸出到檔案中中 使用重定向符號 下面命令將helloword字元寫入myfile檔案中 echo hello word myfile 2.read...

我的Python學習之路之基本語法 輸入輸出

1.如果你使用了非 ascii 字元而且碰到了編碼錯誤,記得在最頂端加一行 coding utf 8 2.試著使用更多的格式化字元。例如 r 就是是非常有用的乙個,它的含義是 不管什麼都列印出來 r與 s的區別,答案來自stackoverflow this is a version of ben j...

CPrimerPlus學習(十三) 檔案輸入輸出

程式清單13.1 count.c程式 count.c 使用標準 i o include include 提供 exit 的原型 intmain int argc,char ar if fp fopen ar 1 r null while ch getc fp eof fclose fp printf...