[英]Testing if user input is between 1-100 not working?
我正在調試1-100之間的“猜數字”程序。 第一個用戶創建一個secretNumber,第二個用戶猜測該數字。
我正在嘗試檢查第二個用戶輸入的數字是否介於1到100之間,但是由於某些原因它仍然接受負數,並且我不知道為什么。
請注意,我對編碼非常陌生,所以我對術語還不熟悉。 在我的課堂上,我們剛剛學習了while循環和關系運算符以及if / else語句,因此只允許我使用它們。
( secretNumber == 0
)是為了確保如果用戶輸入字母而不是數字,則int.TryParse()
不會返回0。
if語句檢查:
( secretNumber >= 1 && secretNumber <= 100 )
並且
( secretNumber >= 1 || secretNumber <= 100 )
這是我的代碼:
//Create a number variable to hold the whole number
int secretNumber;
//Validate that the number is a whole number AND between 1 and 100
if ( int.TryParse(secretNumberString, out secretNumber)
|| ( secretNumber >= 1 && secretNumber <= 100 )
|| secretNumber == 0 )
{
// Tell the user the problem
Console.WriteLine("Sorry, please only type in whole numbers and it must be between 1 and 100!");
// Re-ask the question
Console.WriteLine("What is your secret number?");
// Re-catch the response in the same variable
secretNumberString = Console.ReadLine();
// Re-assign the new input
int.TryParse(secretNumberString, out secretNumber);
}
如果用戶輸入負值,則if語句應運行。
如果用戶鍵入的值大於100,它將運行,但是如果該值小於100,它將不運行。否則,如果數字正確地介於1到100之間,則不應運行。
如果輸入是非數字或超出1〜100的范圍,則該語句必須為true。 那是對的嗎?
//if string is NOT integral (notice the !) Or less than 1 Or bigger than 100
if (!int.TryParse(str, out int secretNumber) || secretNumber < 1 || secretNumber > 100)
此外,由於第二次嘗試未經驗證,用戶仍可以輸入非整數超出范圍的數字。 理想情況下,我認為最好將驗證邏輯作為循環變量:
string input;
int secretNumber;
do
{
Console.WriteLine("Input an integer between 1 and 100, inclusive.");
input = Console.ReadLine();
}
while (!int.TryParse(input, out secretNumber) || secretNumber < 1 || secretNumber > 100);
問題是您的||
(或),這只是一個簡單的布爾代數(Propositional Logic)錯誤,它必須為&&
(and)
但是,類似的更整潔的模式是簡化的驗證循環
var num = 0;
Console.WriteLine("What is your secret number between 1 and 100 inclusively?");
var str = Console.ReadLine();
// while its not a number, "or" the number is less or equal to 0 "or" greater than 100
// annoy them with a message
while (!int.TryParse(str, out num ) || num <= 0 || num > 100)
{
Console.WriteLine("Omg you had one job, a number between 1 and 100 inclusively... Try again");
str= Console.ReadLine()
}
Console.WriteLine($"You won, your number is {num } ");
您可能需要閱讀int.TryParse()
的文檔- 如果成功將字符串解析為整數,則返回true
否則返回false
。 您的測試int.TryParse( secretNumberString, out secretNumber ) || ( secretNumber >= 1 && secretNumber <= 100 ) || secretNumber == 0 )
int.TryParse( secretNumberString, out secretNumber ) || ( secretNumber >= 1 && secretNumber <= 100 ) || secretNumber == 0 )
int.TryParse( secretNumberString, out secretNumber ) || ( secretNumber >= 1 && secretNumber <= 100 ) || secretNumber == 0 )
僅在解析失敗時才測試secretNumber
的值( secretNumber
解析值將為0
)。
這可能會讓您入門:
static int GetAnswer( string prompt, int min , int max )
{
if (min > max) throw new ArgumentException("min must be less than or equal to max");
int value ;
bool valid = false ;
do
{
Console.WriteLine(prompt);
string answer = Console.ReadLine().Trim() ;
valid = int.TryParse(answer, out value)
&& value >= min
&& value <= max
;
if (!valid)
{
Console.WriteLine($"Sorry, please only type in whole numbers in the range {min}-{max}.");
}
} while (!valid );
return value;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.