簡介:C++中,輸出和輸入(簡稱”I/O”)的資料是一串有著先後次序的資料串流(data stream),
越先執行輸入或輸出命令的資料就越先被處理。輸入或輸出的資料來源可以是鍵盤或螢幕,以及檔案、字串。
C++使用相關的類別物件來處理I/O,以下是這些相關類別的類別架構(class hierarchy)圖:
※ 箭頭表示類別的繼承關係,AàB表示A類別繼承B類別。
※ ios_base類別和ios類別定義輸入物件與輸出物件的共同特性。
※ istream負責定義輸入類別,ostring負責定義輸出類別。
※ cin是istream類別的一個物件,cout是ostream類別的一個物件。
※ ifstream/ofstream負責定義檔案資料的輸入/輸出。
※ istringstream/ostringstream負責定義字串資料的輸入/輸出。
※ iostream 同時掌管輸入與輸出。
欲輸入或輸出的資料若原為二進位碼,則會被C++轉換為字元資料,這即是所謂的高階I/O (high-level I/O)(相對的,所謂的低階I/O (low-level I/O)是指輸入輸出的資料保持為二進位碼)。而之後再轉換成相對應的資料型態(如string、bool、int等等),C++將這些資料存放在輸入輸出物件(例如cout或cin)的緩衝區(buffer)中,使其有序的集合起來,待收到指令(譬如程式碼的執行或者輸入enter鍵)後再執行輸入或輸出的動作。
1. 檢查輸入與輸出的狀態,利用I/O物件的成員函式:good()與fail()。good()在I/O物件成功輸入/輸出時回傳true,否則回傳false;fail()在I/O物件輸入/輸出失敗時回傳true,否則回傳false。
int a,b;
cout<<"請輸入a:";cin>>a; //第一次輸入
if(cin.fail()){cout<<"輸入錯誤!";}
else if(cin.good()){
cout<<a<<endl;
} //第一次顯示(輸出)
cin.clear();
cout<<"請輸入b:";cin>>b; //第二次輸入
if(cin.fail()){cout<<"輸入錯誤!";}
else if(cin.good()){
cout<<b<<endl;
} //第二次顯示(輸出)
註一:由於所要輸入的型式是整數,若第一次輸入為10,則第一次輸出為10。又若第二次輸入為15,則第二次輸出為15。
註二:若第一次輸入為aa,則第一次輸出為「輸入錯誤!」。此時若沒有cin.clear();這一行,C++會自動判定接下來的cin輸入也都是錯誤。
註三:使用C++進行輸入時,輸入的內容若有空白字元(空格),cin…等等的輸入類別物件會把空白字元當作終止字元(terminator),也就是執行輸入的指令。若第一次輸入為:1 100,則a=1,第二次輸入也不必使用者輸入了,b=100。C++把空白字元分隔開的1和100當作兩次的輸入了。
留言列表