控制台輸入驗證

2021-09-04 10:35:53 字數 1807 閱讀 9114

vs

提供了乙個模版「控制台應用程式」,這種應用程式主要不是用來與使用者互動的,或做一些後台程式執行的展示,或用來練習

c#語法,如果當做

c#語法學習的平台,在這裡就說一下在控制台下的輸入驗證吧。

控制台狀態下,程式的輸入輸出是流的方式進行的,也就是游標是向前的(如果不做特殊處理的話),輸入的驗證,只能等使用者輸入完後,系統從緩衝區中把資料讀出來進行驗證(因為在這裡沒有按鍵事件)。舉個例子吧,比如,我們提示使用者從控制台上輸入乙個數字型別(如果是字元或字串型別,問題就會少一點,因為

console.readline

或console.read

方法,是返回字串和字元的),拿年齡來說明問題吧。

最直接的驗證是這樣的:

console.writeline("

請輸入年齡:"

);<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

string agestr = console.readline();

int age;

if (int.tryparse(agestr, out age))

else

我們利用型別

.tryparse

方法,來試圖去轉換乙個型別,

int.tryparse

是試圖把字串轉換成整型,當然,這個字串必需是數字的字串,這樣才能轉換成功,否則是不成功的,返回值是為

false

的,所以利用這點,就可以驗證使用者輸入的年齡型別正確與否。其實上面寫法還是複雜一點,於是就要簡化一下,如下**:

console.writeline("

請輸入年齡:"

);string agestr = console.readline();

int age = int.tryparse(agestr, out age) ? age : 1;

console.writeline("

年齡為:"

, age);

用三元運算子可以在一定程度減少了**量,但與之前不一樣的是,在這裡如果使用者輸入年齡有誤,就會給乙個預設值。

上面這兩種做法都還行,能起一定的效果,但最大的依賴是

tryparse

,這樣在業務邏輯上有一點彆扭,是通過乙個方法來驗證型別的。

其實用更好的辦法,如下:

regex reg =  new

regex(@"^\d+$");//

重複一次或多次

console.writeline("

請輸入年齡:"

);string agestr = console.readline();

if (reg.match(agestr).success) "

, agestr); }

else

正規表示式,它能很好解決這個問題,這裡不是在討論正規表示式,關於它的學習,請參考相關文件,在這裡主要說明,在語言中引用這個技術,在很大程度上解決了資料的安全性,有效性。

比如,我們都知道,年齡,特別是人的年齡,是在0到

150,沒有負數,也沒有見過超過

150歲的人,如果前兩段**做的話,那就是分段驗證,前面驗證是否為整型,後面驗證是否在0到

150歲之間,如果用正則,只需要如下變化:

regex

reg = new

regex(@"^\d$|^\d$|^1[0-4]\d$|^150$");

只要一次的驗證,改正規表示式,就能答到資料的驗證。

提倡用正則,但正則一般學習和理解起來有一點難度,這就是雙刃劍。

控制台輸入驗證

vs 提供了乙個模版 控制台應用程式 這種應用程式主要不是用來與使用者互動的,或做一些後台程式執行的展示,或用來練習 c 語法,如果當做 c 語法學習的平台,在這裡就說一下在控制台下的輸入驗證吧。控制台狀態下,程式的輸入輸出是流的方式進行的,也就是游標是向前的 如果不做特殊處理的話 輸入的驗證,只能...

控制台輸入驗證

vs提供了乙個模版 控制台應用程式 這種應用程式主要不是用來與使用者互動的,或做一些後台程式執行的展示,或用來練習c 語法,如果當做c 語法學習的平台,在這裡就說一下在控制台下的輸入驗證吧。控制台狀態下,程式的輸入輸出是流的方式進行的,也就是游標是向前的 如果不做特殊處理的話 輸入的驗證,只能等使用...

C 輸入 1 控制台輸入

記錄不同方式的控制台輸入。動態輸入,以特殊字元結束。如下兩種輸入方式 define max sample num 100 最大樣本個數 double sample 樣本集 int sample num 0 樣本個數 int number 2 維數 第一種方式 getline void input f...