# C++ 基本的輸入輸出
C++ 標準庫提供了一組豐富的輸入/輸出功能,我們將在后續的章節進行介紹。本章將討論 C++ 編程中最基本和最常見的 I/O 操作。
C++ 的 I/O 發生在流中,流是字節序列。如果字節流是從設備(如鍵盤、磁盤驅動器、網絡連接等)流向內存,這叫做**輸入操作**。如果字節流是從內存流向設備(如顯示屏、打印機、磁盤驅動器、網絡連接等),這叫做**輸出操作**。
### I/O 庫頭文件
下列的頭文件在 C++ 編程中很重要。
| 頭文件 | 函數和描述 |
|-----|-----|
| `<iostream>` | 該文件定義了 **cin、cout、cerr** 和 **clog** 對象,分別對應于標準輸入流、標準輸出流、非緩沖標準錯誤流和緩沖標準錯誤流。 |
| `<iomanip>` | 該文件通過所謂的參數化的流操縱器(比如 **setw** 和 **setprecision**),來聲明對執行標準化 I/O 有用的服務。 |
| `<fstream>` | 該文件為用戶控制的文件處理聲明服務。我們將在文件和流的相關章節討論它的細節。 |
### 標準輸出流(cout)
預定義的對象 **cout** 是 **ostream** 類的一個實例。cout 對象"連接"到標準輸出設備,通常是顯示屏。**cout** 是與流插入運算符 << 結合使用的,如下所示:
~~~
#include <iostream>
using namespace std;
int main( )
{
char str[] = "Hello C++";
cout << "Value of str is : " << str << endl;
}
~~~
當上面的代碼被編譯和執行時,它會產生下列結果:
~~~
Value of str is : Hello C++
~~~
C++ 編譯器根據要輸出變量的數據類型,選擇合適的流插入運算符來顯示值。<< 運算符被重載來輸出內置類型(整型、浮點型、double 型、字符串和指針)的數據項。
流插入運算符 << 在一個語句中可以多次使用,如上面實例中所示,**endl** 用于在行末添加一個換行符。
### 標準輸入流(cin)
預定義的對象 **cin** 是 **istream** 類的一個實例。cin 對象附屬到標準輸入設備,通常是鍵盤。**cin** 是與流提取運算符 >> 結合使用的,如下所示:
~~~
#include <iostream>
using namespace std;
int main( )
{
char name[50];
cout << "請輸入您的名稱: ";
cin >> name;
cout << "您的名稱是: " << name << endl;
}
~~~
當上面的代碼被編譯和執行時,它會提示用戶輸入名稱。當用戶輸入一個值,并按回車鍵,就會看到下列結果:
~~~
請輸入您的名稱: cplusplus
您的名稱是: cplusplus
~~~
C++ 編譯器根據要輸入值的數據類型,選擇合適的流提取運算符來提取值,并把它存儲在給定的變量中。
流提取運算符 >> 在一個語句中可以多次使用,如果要求輸入多個數據,可以使用如下語句:
~~~
cin >> name >> age;
~~~
這相當于下面兩個語句:
~~~
cin >> name;
cin >> age;
~~~
### 標準錯誤流(cerr)
預定義的對象 **cerr** 是 **ostream** 類的一個實例。cerr 對象附屬到標準錯誤設備,通常也是顯示屏,但是 **cerr** 對象是非緩沖的,且每個流插入到 cerr 都會立即輸出。
**cerr** 也是與流插入運算符 << 結合使用的,如下所示:
~~~
#include <iostream>
using namespace std;
int main( )
{
char str[] = "Unable to read....";
cerr << "Error message : " << str << endl;
}
~~~
當上面的代碼被編譯和執行時,它會產生下列結果:
~~~
Error message : Unable to read....
~~~
### 標準日志流(clog)
預定義的對象 **clog** 是 **ostream** 類的一個實例。clog 對象附屬到標準錯誤設備,通常也是顯示屏,但是 **clog** 對象是緩沖的。這意味著每個流插入到 clog 都會先存儲在緩沖在,直到緩沖填滿或者緩沖區刷新時才會輸出。
**clog** 也是與流插入運算符 << 結合使用的,如下所示:
~~~
#include <iostream>
using namespace std;
int main( )
{
char str[] = "Unable to read....";
clog << "Error message : " << str << endl;
}
~~~
當上面的代碼被編譯和執行時,它會產生下列結果:
~~~
Error message : Unable to read....
~~~
通過這些小實例,我們無法區分 cout、cerr 和 clog 的差異,但在編寫和執行大型程序時,它們之間的差異就變得非常明顯。所以良好的編程實踐告訴我們,使用 cerr 流來顯示錯誤消息,而其他的日志消息則使用 clog 流來輸出。
- C++ 入門
- C++ 簡介
- C++ 環境設置
- C++ 基本語法
- C++ 注釋
- C++ 數據類型
- C++ 變量類型
- C++ 變量作用域
- C++ 常量
- C++ 修飾符類型
- C++ 存儲類
- C++ 運算符
- C++ 循環
- C++ while 循環
- C++ for 循環
- C++ do...while 循環
- C++ 嵌套循環
- C++ break 語句
- C++ continue 語句
- C++ goto 語句
- C++ 判斷
- C++ if 語句
- C++ if...else 語句
- C++ 嵌套 if 語句
- C++ switch 語句
- C++ 嵌套 switch 語句
- C++ 函數
- C++ 數字
- C++ 數組
- C++ 多維數組
- C++ 指向數組的指針
- C++ 傳遞數組給函數
- C++ 從函數返回數組
- C++ 字符串
- C++ 指針
- C++ Null 指針
- C++ 指針的算術運算
- C++ 指針 vs 數組
- C++ 指針數組
- C++ 指向指針的指針(多級間接尋址)
- C++ 傳遞指針給函數
- C++ 從函數返回指針
- C++ 引用
- C++ 把引用作為參數
- C++ 把引用作為返回值
- C++ 日期 & 時間
- C++ 基本的輸入輸出
- C++ 數據結構
- C++ 面向對象
- C++ 類 & 對象
- 類 & 對象詳解
- C++ 類成員函數
- C++ 類訪問修飾符
- C++ 類構造函數 & 析構函數
- C++ 拷貝構造函數
- C++ 友元函數
- C++ 內聯函數
- C++ this 指針
- C++ 指向類的指針
- C++ 類的靜態成員
- C++ 繼承
- C++ 重載運算符和重載函數
- C++ 一元運算符重載
- C++ 二元運算符重載
- C++ 關系運算符重載
- C++ 輸入/輸出運算符重載
- C++ ++ 和 -- 運算符重載
- C++ 賦值運算符重載
- C++ 函數調用運算符 重載
- C++ 下標運算符 重載
- C++ 類成員訪問運算符 -> 重載
- C++ 多態
- C++ 數據抽象
- C++ 數據封裝
- C++ 接口(抽象類)
- C++ 高級
- C++ 文件和流
- C++ 異常處理
- C++ 動態內存
- C++ 命名空間
- C++ 模板
- C++ 預處理器
- C++ 信號處理
- C++ 多線程
- C++ Web 編程
- C++ 資源庫
- C++ STL 教程
- C++ 標準庫
- C++ 有用的資源