有章法的學習c++(2)初識輸入輸出

基本概念

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++中有兩種註釋。

單行註釋:在需要註釋的一行內容前加上雙斜槓(//)

界定符對註釋(多行註釋):在需要註釋內容的最前面記上/*,後面加上*/。

編譯器會自動忽略//後面的內容和/*與*/之間的內容。

界定符對註釋不能嵌套。編譯器會自動匹配遇到的第一個/*和遇到的第一個*/。

單行註釋內的任何內容都會被忽略,包括/**/





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章