基本概念
c++語言並未定義任何的輸入輸出語句,取而代之,它包含了一個全面的標準庫(standard library)來提供io機制(以及其它很多設施)。
iostream庫:
包含兩個基礎類型,istream和ostream,分別表示輸入流和輸出流。
一個流就是一個字符序列,表示隨時間的推移,字符的順序生成或消耗。標準輸入輸出對象:
標準庫定義了4個io對象,cin,cout,cerr和clog。
分別爲標準輸入、標準輸出、標準錯誤,第四個沒有名字。
無論是哪個io對象,系統都會將其與運行窗口關聯起來。因此,cin會從窗口讀取數據,cout,cerr,clog會將數據寫到運行程序的窗口。
下面看一個使用io庫的程序:
#include<iostream>
<span style="font-family: Arial, Helvetica, sans-serif;">using namespace std;</span>
<span style="font-family: Arial, Helvetica, sans-serif;">/*</span>
<span style="font-family:Arial, Helvetica, sans-serif;">讀取兩個數,求他們的和</span>
<span style="font-family: Arial, Helvetica, sans-serif;">*/</span>
int main(){
<span style="white-space:pre"> </span>//輸出提示
cout << "enter two numbers:" << endl;
<span style="white-space:pre"> </span>//定義並初始化兩個數
int value1 = 0,value2 = 0;
<span style="white-space:pre"> </span>//輸入兩個數
cin >> value1 >> value2;
<span style="white-space:pre"> </span>//輸出結果
cout << "the sum of " << value1 << " and " << value2 << " is " << value1 + value2 << endl;
return 0;
}
代碼的解釋:
程序第一行
#include<iostream>
這一行告訴了編譯器我們要使用iostream庫。
尖括號中的名字(本例中是iostream)指出一個頭文件(header)。
程序第二行
using namespace std;
這一行確定了本程序使用的一個命名空間。
命名空間的作用是防止命名衝突。
此處先聲明瞭命名空間,可以減少代碼量,方便編碼。
文章的後面專門介紹,現在先知道這個定義,有疑問後面也先放心裏。
ps:以前上學的時候老師照搬講義上的內容,哪有閒心一行一行的解釋代碼,大部分時候都是假設你已經會了,說的
東西啥都不懂。不懂就走神,走神更不懂。一學期過去了也能沒弄清namespace(當然我自己的鍋也很大)。
向流中寫入數據
函數體第一行
cout << "enter two numbers:" << endl;
在c++中一個表達式產生一個計算結果。
一個表達式,由一個或多個運算對象和一個運算符組成。
而在這一行,這條語句中的表達式,使用了輸出運算符(<<)在標準出輸出上打印消息。
<<運算符接受兩個運算對象:其中左側對象必須是ostream對象,右側對象是要打印的值。
此運算符把給定的值寫入左側的運算對象中去。
輸出運算符的運算結果就是左側運算對象。
我們的輸出運算符使用量兩次,分兩次運算。
cout << "enter two numbers:"的結果就是 cout
cout << "enter two numbers:" << endl;第一次運算得到cout << endl;第二次運算得到cout。
cout << "enter two numbers:" << endl;
即(cout << "enter two numbers:") << endl;
也等價於cout << "enter two numbers:";cout << endl;
第一個輸出運算符給用戶打印一條消息,這個消息是字符串字面值常量(string literal)(字面值常量以後也會介紹到)。
第二個運算符打印endl,這是一個被稱爲操縱符(manipulator)的特殊值。寫入endl的效果是結束當前行(即換行)和將與設備相關聯的緩衝區(buffer)中的內容刷到設備中
。
從流中讀取數據
函數體第二行
int value1 = 0,value2 = 0;
此處定義兩個變量來保存要被輸入的數據。
這兩個變量被定義爲int型,其中int型爲內置類型(前面已經介紹)。
我們將這兩個變量初始化爲0。
初始化,就是在變量創建的時候同時爲他賦值。
函數體第三行
cin >> value1 >> value2;
它讀入輸入數據。
輸出運算符(>>),他接受一個istream作爲左側運算對象,接受一個對象作爲右側運算對象。
其運算規則與輸出運算符類似。
函數體第四行
return 0;
前面已經說過,這裏不詳述。
函數的語句解釋完了,我們來說一下命名空間
標準庫中定義的名字都在命名空間std中。如cin,cout等。
當你使用標準庫中的一個名字時,必須顯式的說明,我要使用std空間中的某一名字。
例如:我想輸出a。語句應爲,std::cout << "a";其中::是作用於運算符。
在上面的程序中,我們使用命名空間的方式是在代碼的第二行,聲明瞭命名空間std,這樣編譯器就知道我們使用的變量是來自命名空間std的。
這樣的好處是,比使用作用域運算符更加方便、簡潔。
代碼的編譯運行結果如圖:
關於註釋
編譯器會忽略掉註釋的內容。但是代碼的讀者不會。
編碼者可以使用註釋對代碼中的變量,算法等進行解釋。
c++中有兩種註釋。
單行註釋:在需要註釋的一行內容前加上雙斜槓(//)
界定符對註釋(多行註釋):在需要註釋內容的最前面記上/*,後面加上*/。
編譯器會自動忽略//後面的內容和/*與*/之間的內容。
界定符對註釋不能嵌套。編譯器會自動匹配遇到的第一個/*和遇到的第一個*/。
單行註釋內的任何內容都會被忽略,包括/**/