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