我正在努力改进我的编程并将事情深入到我的头脑中,所以我只是快速开发一个获取用户输入并打印其名称的应用程序。但也获得了“年龄验证”的输入。
我正在练习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;
}
}
答案 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.Parse
或int.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
方法尝试解析它,而不是抛出异常,它告诉你它不能解析它(通过返回值)并允许你直接处理它(而不是通过尝试/捕获)。
这有点冗长,但你说你在学习,所以我想我会给你一些东西来考虑和阅读。