W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
目前為止,我們寫的程序都是可預(yù)見的,它們每次運行時都做相同的事情。然而大多數(shù)時候我們需要程序能從用戶那得到輸入并隨之做出反應(yīng)。
有很多種方式可以得到輸入,包括鍵盤輸入,鼠標(biāo)移動和按鈕點擊,此外還有更特別的機(jī)制,例如聲控和視網(wǎng)膜掃描。本文我們只考慮鍵盤輸入。
在頭文件iostream.h中,C++定義了一個cin對象來處理輸入,就像用cout對象處理輸出一樣。從用戶那得到一個整型值可以這么寫:
int x;
cout >> x;
>>操作符使得程序停止執(zhí)行,等待用戶輸入。如果用戶輸入了有效值,程序會將它轉(zhuǎn)換成整型值并存放在x中。
如果用戶輸入的不是整型,C++不會報告一個錯誤。相反,它把一些無意義的值存在x中并繼續(xù)執(zhí)行。
幸運的是,有一種方法可以檢查輸入語句是否成功。我們可以在cin上調(diào)用good函數(shù)來檢驗所謂的流狀態(tài)。good方法返回一個布爾值:如果為真,則說明上一次的輸入語句成功了。否則,我們知道之前的一些操作失敗了,而且接下來的操作也會失敗。
因此,從用戶那得到輸入看起來會像這樣:
int main()
{
int x;
// 提示用戶輸入
cout << "Enter an integer: ";
// 獲取輸入
cin >> x;
//檢查輸入語句是否成功
if(cin.good == flase) {
cout << "That was not an integer." << endl;
return -1;
}
//打印從用戶處得到的值
cout << x << endl;
return 0;
}
cin也可以用于輸入一個apstring:
apstring name;
cout << "What's your name? ";
cin >> name;
cout << name <<endl;
遺憾的是,這條語句只得到了輸入的第一個單詞,而把剩下的輸入留給了下一條輸入語句。所以,如果你運行這段程序并打下你的全名,它將只輸出你的第一個名字。
正因為這些問題(無法處理錯誤和可笑的行為),我完全避免使用>>操作符,除非我是從確定無誤的源中讀取數(shù)據(jù)。
作為替代方法,我在aspstring中使用了一個getline方法。
apstring name;
cout << "What is your name? ";
getline(cin, name);
cout << name << endl;
getline的第一個參數(shù)是cin,它是輸入的來源。第二個參數(shù)是spstring的名字,用來存儲結(jié)果。
getline讀入整行輸入直到用戶敲打Return或Enter鍵。這對于輸入包含空格的字符串來說是很有用的。
事實上,getline對于獲取任何輸入通常都有效。例如,若你想讓用戶輸入一個整數(shù),你可以輸入一個字符串然后檢查它是否是一個有效整數(shù)。如果是,你能把它轉(zhuǎn)換成一個整數(shù)值。否則,你能輸出一個錯誤信息并讓用戶再次輸入。
為了將字符串轉(zhuǎn)換成整數(shù),你可以使用atoi函數(shù),它定義在在頭文件stdlib.h中。我們會在15.4節(jié)中討論到它。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: