не может преобразовать int в строковую простую возрастную программу - PullRequest
0 голосов
/ 07 ноября 2019

У меня странная проблема с моей программой. Я хочу напечатать свое имя, фамилию и возраст, и я чувствую, что здесь есть простое решение, которого я просто не вижу.

Вот мой код:

string firstname; //the data type that is named and initialised 
string lastname;
string userAge;
int age;

//takes user input 
Console.Write("please enter your first name - "); 

//stores user input 
firstname = Console.ReadLine(); 

Console.Write("please enter your last name - ");

lastname = Console.ReadLine();

Console.Write("please enter your age - ");

userAge = Console.ReadLine();

//this is a bit of useless code I was playing around with earlier     
//age = Console.Readline();              

userAge = Convert.ToInt32(age);

//prints user input to screen the 0 is the position
Console.WriteLine("Your name is {0} {1}", firstname,lastname + "and your age is",age); 

//pauses the program for 1000 mlseconds so you can see what the result is 
Thread.Sleep(2000); 

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Это дает вам эту ошибку, потому что ToInt32 принимает string в качестве ввода, а вы даете ему int. Вместо этого вы должны дать ему string и получить int в результате:

userAge = Console.ReadLine();            
age = Convert.ToInt32(userAge);

Но на самом деле вам не нужно ничего конвертировать. Вместо этого держите все как строки. Кроме того, использование WriteLine немного неверно:

string firstname;
string lastname;
string userAge;

//takes user input 
Console.Write("please enter your first name - "); 

//stores user input 
firstname = Console.ReadLine(); 

Console.Write("please enter your last name - ");

lastname = Console.ReadLine();

Console.Write("please enter your age - ");

userAge = Console.ReadLine();  

//prints user input to screen the 0 is the position
Console.WriteLine("Your name is {0} {1} and your age is {2}.", 
        firstname, lastname, userAge); 

//pauses the program for 1000 mlseconds so you can see what the result is 
Thread.Sleep(2000); 
0 голосов
/ 07 ноября 2019

Вы должны использовать:

age = Convert.ToInt32(userAge);

И:

Console.WriteLine($"Your name is {firstname} {lastname} and your age is {age}"); 

$ разрешает интерполяцию строки, чтобы поместить переменные между {} в строке.

Вы можете использоватьTryParse вместо Convert, которое вызывает исключение, если не введено число или оно не помещается в int, на uint, потому что age должен быть положительным:

uint age;  // instead of int
uint.TryParse(userAge, out age);

Так что в случае ошибки, ageравно 0.

Вы также можете проверить результат этого метода, который является ложным в случае ошибки, например:

do 
{ 
  Console.Write("please enter your age - ");
  userAge = Console.ReadLine();
}
while ( !uint.TryParse(userAge, out age) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...