使用者輸入不期望的輸入

2021-07-24 21:45:16 字數 1540 閱讀 4142

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

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

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

std::cin,緩衝,和提取

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

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

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

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

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

40#include double getdouble()

char getoperator()

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

int main()

現在,考慮無效的使用者輸入可能會打破這個程式。

首先,我們要求使用者輸入一些數字。如果他們進入了乙個數字以外的其他東西(例如:「問」)?在這種情況下,提取將失敗。

第二,我們要求使用者輸入四個可能的符號之一。如果他們進入乙個字元以外的符號,我們期待什麼呢?我們將能夠提取輸入,但我們目前沒有處理之後會發生什麼。

第三,如果我們要求使用者輸入乙個符號,他們輸入乙個像「*問你好」的字串。雖然我們可以提取我們需要的「*」字元,但在緩衝區中有額外的輸入,可能會導致道路上的問題。

無效文字輸入的型別

我們通常可以將輸入的文字錯誤分為四種型別:

在這種情況下,我們要求使用者輸入四個符號中的乙個,但他們輸入的是「k」。「k」是乙個有效的字元,因此std::cin愉快地提取它變數運算,這會返回到主。但我們的計畫是不希望這種情況發生,所以它不正確處理這種情況下(因此從來沒有輸出任何東西)。

這裡的解決方案很簡單:做輸入驗證。這通常由3個步驟組成:

1)檢查使用者的輸入是否是你所期望的。

2)如果是的話,將該值返回給使用者。

3)如果不是,告訴使用者一些錯誤,讓他們再試一次。

這是乙個更新的getoperator()功能,並輸入驗證。

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

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

python請求使用者輸入 使用者輸入

使用者輸入 大多數程式都旨在解決終端使用者的問題,為此通常需要從使用者那裡獲取一些資訊。例如,假設有人要判斷自己是否到了投票的年齡,要編寫回答這個問題的程式,就需要知道使用者的年齡,這樣才能給出 答案。因此,這種程式需要讓使用者輸入其年齡,再將其與投票年齡進行比較,以判斷使用者是否到了投票的年齡,再...

暫停程式 等待使用者輸入 Python使用者輸入

大多數程式都旨在解決終端使用者的問題,為此就需要獲取使用者的資訊。假如你要判斷小孩是否需要購買全價票,就需要獲取小孩的身高,這樣才能得出正確的結論。因此這種程式就需要讓使用者輸入其身高,再與規定的身高值進行比較,最後得出結果。python使用函式input 接受使用者輸入。從此刻開始,我們一起學習怎...