C# - 获取Age的用户输入..但收到错误?

时间:2011-09-22 20:21:33

标签: c#

我正在努力改进我的编程并将事情深入到我的头脑中,所以我只是快速开发一个获取用户输入并打印其名称的应用程序。但也获得了“年龄验证”的输入。

我正在练习IF& ELSE语句以及嵌套类。

然而,我的编译器正在向我发送一个错误,我似乎无法弄明白。我试图让用户输入他的年龄,然后继续使用IF& ELSE声明。

  

编译器正在拍摄错误。 “”无法隐式转换类型   string to 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;
    }
}

6 个答案:

答案 0 :(得分:5)

如错误所示,您无法隐式地将字符串键入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
 }

答案 1 :(得分:3)

您正尝试使用以下行将字符串值分配给int:

myCharacter.age = Console.ReadLine();

尝试:

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

答案 2 :(得分:2)

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

e.g。

  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!"); 
  } 

答案 3 :(得分:2)

这看起来像是一个学生项目。

来自ReadLine()的输入始终为string类型。然后你将一个字符串比作17,这是无效的,因为17是一个int。使用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.");

答案 4 :(得分:1)

行。这里的问题是age被定义为一个int,而Console.ReadLine()总是返回一个字符串,因此你必须将用户输入从string转换为整数才能正确存储年龄。 像这样:

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

答案 5 :(得分:1)

当您从控制台读取输入时,它会以字符串的形式将其返回给您。在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方法尝试解析它,而不是抛出异常,它告诉你它不能解析它(通过返回值)并允许你直接处理它(而不是通过尝试/捕获)。

这有点冗长,但你说你在学习,所以我想我会给你一些东西来考虑和阅读。