Latest web development tutorials

C++ 基本的輸入輸出

C++ 標準庫提供了一組豐富的輸入/輸出功能,我們將在後續的章節進行介紹。 本章將討論C++ 編程中最基本和最常見的I/O 操作。

C++ 的I/O 發生在流中,流是字節序列。 如果字節流是從設備(如鍵盤、磁盤驅動器、網絡連接等)流向內存,這叫做輸入操作 。 如果字節流是從內存流向設備(如顯示屏、打印機、磁盤驅動器、網絡連接等),這叫做輸出操作 。

I/O 庫頭文件

下列的頭文件在C++ 編程中很重要。

头文件函数和描述
<iostream>该文件定义了cin、cout、cerrclog对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
<iomanip>该文件通过所谓的参数化的流操纵器(比如setwsetprecision),来声明对执行标准化 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 流來輸出。