等待被提取到變數

2021-07-22 14:01:24 字數 1366 閱讀 6614

大多數程式都有乙個使用者介面的某種需要處理使用者輸入。在專案中,你一直在寫,你一直在使用std::cin要求使用者輸入文字輸入。由於文字輸入是如此的自由形式(使用者可以輸入任何東西),所以很容易為使用者輸入不期望的輸入。

當你寫程式時,你應該總是考慮使用者如何(無意或其他方式)誤用你的程式。乙個寫得很好的程式將預期使用者將如何濫用它,或者優雅地處理這些情況,或者阻止他們發生在第一位(如果可能的話)。乙個處理錯誤情況的程式,被認為是強大的。

在這節課中,我們來看看具體的辦法,使用者可以通過標準輸入無效的文字輸入::cin,並告訴你一些不同的方式來處理這些情況。

std::cin,緩衝,和提取

為了**std::cin和運算子》 >可以失敗,它首先有助於了解它們是如何工作的一點點。

當我們使用操作符來獲取使用者輸入,並把它變成乙個變數時,這被稱為「提取」。在此上下文中使用時,相應地呼叫了提取運算子。

當使用者輸入響應提取操作輸入,資料被放置在乙個緩衝區::性病在cin。乙個緩衝區(也稱為資料緩衝區)只是乙個暫時的儲存資料的記憶體塊,而它從乙個地方移動到另乙個地方。在這種情況下,緩衝區是用來儲存使用者輸入的,而它的等待被提取到變數。

當使用提取運算子時,下面的過程會發生:

1

2int x;

std::cin >> x;

一些圖形使用者介面和先進的文字介面會讓你驗證輸入的使用者進入(按字元)。一般來說,程式設計師提供了乙個驗證函式,接受輸入的使用者已輸入到目前為止,並返回真實,如果輸入是有效的,否則。每當使用者按下乙個鍵時,這個函式就被呼叫。如果驗證函式返回真值,則使用者只需按下「確認」鍵就可以了。如果驗證函式返回錯誤,使用者只輸入的字元將被丟棄(而不是在螢幕上顯示)。使用這種方法,你可以確保任何輸入使用者輸入是保證是有效的,因為任何無效的按鍵是發現並立即丟棄。不幸的是,std::cin不支援這種風格的驗證。

由於字串沒有什麼限制,可以輸入任何字元,提取是保證成功(雖然記得std::cin停止提取在第乙個非空格字元)。一旦輸入乙個字串,該程式可以分析字串,看看它是否有效。然而,分析字串和轉換字串輸入到其他型別(例如數字)可以是具有挑戰性的,所以這只是在罕見的情況下完成的。

通常,我們讓std::cin和提取運算元做艱苦的工作。在這種方法下,我們讓使用者輸入他們想要的任何東西,有std::cin和運算子》 >嘗試提取,和處理的後果如果失敗。這是最簡單的方法,和乙個我們將談論更多關於下面。

乙個示例程式

考慮以下的計算器程式,沒有錯誤處理:

#include double getdouble()

char getoperator()

void printresult(double x, char op, double y)

int main()

而它等待被提取到變數

大多數有某種使用者介面的程式需要處理使用者輸入。在專案中,你一直在寫,你一直在使用std cin要求使用者輸入文字輸入。因為文字輸入是自由格式的 使用者可以輸入任何東西 所以使用者很容易輸入不期望的輸入。在編寫程式時,應始終考慮使用者將如何 無意或以其他方式 濫用程式。乙個寫得很好的程式會預見使用者...

Xml文件資料提取到Excel表中

近期,財務一位同事,吐槽 某xx開票軟體 匯出資料文件只有xml格式,竟然沒有excel文件,工作起來非常不方便,希望我想想辦法。上圖 需求分析 xml資料 提取到datatable中 匯入到excel中 難度不大,開始幹起。1 主程式視窗 2 解決方案結構 3 實現效果 4 生成excel pub...

xpath只能提取到部分頁面元素的問題

世界盃剛過,想從世界盃貼吧爬取一些,用requests庫,發現當設定user agent時,li標籤用xpath提取不到,div標籤只能提取到部分,並且發現當不設定user agent時就能正常提取到 嘗試著修改為ie瀏覽器的user agnet mozilla 5.0 compatible msi...