簡體   English   中英

C#-獲取年齡的用戶輸入..但是收到錯誤?

[英]C#- Getting user input for Age.. but receiving error?

我正在嘗試改進程序設計,使事情更加深入人心,因此,我正在快速開發一個可以獲取用戶輸入並打印其姓名的應用程序。 但也可以輸入他們的“年齡驗證”信息。

我正在練習IF&ELSE語句以及嵌套類。

但是我的編譯器正在向我射擊錯誤,而我似乎無法弄清楚。 我試圖讓用戶輸入年齡,然后繼續執行IF&ELSE語句。

編譯器正在射擊錯誤。 “”無法將類型字符串隱式轉換為int“

現在程序中唯一的錯誤是myCharacter.age = Console.ReadLine();。

using System;

namespace csharptut
{
    class CharPrintName
    {
        static void Main()
        {
            Character myCharacter = new Character();

            Console.WriteLine("Please enter your name to continue: ");
            myCharacter.name = Console.ReadLine();

            Console.WriteLine("Hello {0}!", myCharacter.name);

            Console.WriteLine("Please enter your age for verification purposes: ");

            myCharacter.age = Console.ReadLine();

            if (myCharacter.age <= 17)
            {
Console.WriteLine("I'm sorry {0}, you're too young to enter!",myCharacter.name);
            }
            else if (myCharacter.age >= 18)
            {
                Console.WriteLine("You can enter!");
            }

        }
    }
    class Character
    {
        public string name;
        public int age;
    }
}

如錯誤所示,您不能隱式地將字符串鍵入int。 您需要將其解析為一個int。

 string input = Console.ReadLine();
 int age;
 if (int.TryParse(input, out age)
 {
     // input is an int
     myCharacter.age = age;
 }
 else
 {
     // input is not an int
 }

您正在嘗試使用以下代碼行將字符串值分配給int:

myCharacter.age = Console.ReadLine();

嘗試:

myCharacter.age = Int32.Parse(Console.ReadLine());

character.age需要一個Int,但ReadLine()返回一個字符串,您需要查看使用int.Parseint.TryParse以避免異常

例如

  if (!int.TryParse(Console.ReadLine(),out myCharacter.age)) {
    Console.WriteLine("You didn't enter a number!!!");
  } else if (myCharacter.age <= 17) { 
    Console.WriteLine("I'm sorry {0}, you're too young to enter!",myCharacter.name); 
  }  else { 
    Console.WriteLine("You can enter!"); 
  } 

這看起來像一個學生項目。

來自ReadLine()的輸入始終為字符串類型。 然后,您將一個無效的字符串與17進行比較,因為17是一個整數。 使用TryParse與parse可以避免在運行時引發異常。

string typedAge = Console.ReadLine();
int Age = 0;
if (!int.TryParse(typedAge, out Age))
  Console.WriteLine("Invalid age");

if (Age <= 17)
  Console.WriteLine("You're awfully young.");

好。 這里的問題是年齡被定義為一個int並且Console.ReadLine()總是返回一個字符串,因此您必須將用戶輸入從字符串轉換為整數才能正確存儲年齡。 像這樣:

myCharacter.age = Int32.Parse(Console.ReadLine());

當您從控制台讀取輸入時,它將以字符串形式返回給您。 在C#(一種靜​​態類型的語言)中,您不能簡單地采用一種類型並將其應用於另一種類型。 您需要以某種方式進行轉換,可以通過多種方法進行。

第一種方法是強制轉換:

myCharacter.age = (int)Console.ReadLine();

這是行不通的,因為字符串和整數是兩種完全不同的類型,並且不能簡單地將一個類型轉換為另一個類型。 閱讀有關強制類型的更多信息。

第二種方法是將其轉換,再次有兩種方法可以執行此操作:

myCharacter.age = Int32.Parse(Console.ReadLine());

只要您輸入一個實際數字,此方法就可以工作,在這種情況下,Parse方法將讀取字符串並找出適合您的整數。 但是,如果您鍵入“ ABC”,則會出現異常,因為Parse方法無法將其識別為整數。 因此,更好的方法是:

string newAge = Console.ReadLine();
int theAge;
bool success = Int32.TryParse(newAge, out theAge);
if(!success)
   Console.WriteLine("Hey! That's not a number!");
else
   myCharacter.age = theAge;

在這種情況下, TryParse方法嘗試解析它,而不是拋出異常,它告訴您它不能(通過返回值)解析它,並允許您直接處理(而不是通過try / catch)。

這有點冗長,但是您說您正在學習,所以我想我會給您一些考慮和閱讀的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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