所以使用者很容易輸入不期望的輸入

2021-07-25 19:39:34 字數 1328 閱讀 4488

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

在編寫程式時,應始終考慮使用者將如何(無意或以其他方式)濫用程式.。乙個寫得很好的程式會預見使用者會如何濫用它,或者是優雅地處理這些情況,或者防止它們發生在第一位(如果可能的話)。乙個程式,處理錯誤的情況下,據說是強大的。

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

std::cin,緩衝,和提取

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

當我們使用運算子來獲取使用者輸入並將其輸入變數時,這稱為「提取」。運算子在此上下文中使用,因此稱為提取運算子.。

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

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

int x;

std::cin >> x;

#include double getdouble()

char getoperator()

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

一些圖形使用者介面和高階文字介面將讓您驗證輸入的使用者輸入(字元按字元)。一般來說,程式設計師提供了乙個驗證函式,該函式接受使用者輸入到目前為止的輸入,如果輸入有效,則返回true,否則為false。每次使用者按下鍵時都會呼叫此函式.。如果驗證函式返回true,則使用者按下的鍵將被接受.。如果驗證函式返回false,則使用者輸入的字元將被丟棄(而不是在螢幕上顯示)。使用這種方法,你可以確保任何輸入使用者輸入是保證是有效的,因為任何無效的按鍵是發現並立即丟棄。不幸的是,std::cin不支援這種風格的驗證。

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

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

乙個示例程式

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

使用者輸入不期望的輸入

大多數程式都有乙個使用者介面的某種需要處理使用者輸入。在專案中,你一直在寫,你一直在使用std cin要求使用者輸入文字輸入。由於文字輸入是如此的自由形式 使用者可以輸入任何東西 所以很容易為使用者輸入不期望的輸入。當你寫程式時,你應該總是考慮使用者如何 無意或其他方式 誤用你的程式。乙個寫得很好的...

讀取使用者的輸入

我們如何讀取使用者的鍵盤 控制台 輸入呢?從鍵盤和標準輸入 os.stdin 讀取輸入,最簡單的辦法是使用 fmt 包提供的 scan 和 sscan 開頭的函式。請看以下程式 從控制台讀取輸入 package main import fmt var firstname,lastname,s str...

使用者輸入資料的驗證

1 1 手工程式設計驗證,針對該動作類中的所有的動作方法 2步驟 3a 動作類繼承actionsupport 4 b 覆蓋呼叫public void validate 方法 5c 在validate方法中,編寫不符合要求的 判斷,並呼叫父類的addfielderror string fieldnam...