簡體   English   中英

測試用戶輸入是否在1-100之間不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM