Ввод не в правильном формате
Я хочу прочитать двойное значение и целое значение из консольного приложения в C#. `
int ch = Console.Read();
Console.WriteLine("Enter a random integer");
int x = int.Parse(Console.ReadLine());
switch (ch)
{
case 1:
TempServiceRef.Service1Client s1 = new ConsoleTempApplication.TempServiceRef.Service1Client();
Console.WriteLine("Enter temperature");
string n = Console.ReadLine();
int param = int.Parse(n);
double result = s1.c2f(param);
Console.WriteLine(result);
Console.ReadLine();
break;
case 2:
TempServiceRef.Service1Client s2 = new ConsoleTempApplication.TempServiceRef.Service1Client();
Console.WriteLine("Enter temperature");
int param1 = int.Parse(Console.ReadLine());
double result1 = s2.f2c(param1);
Console.WriteLine(result1);
Console.ReadLine();
break;
default:
Environment.Exit(0);
break;
}
`
Консольное приложение закрывается, когда я пытаюсь ввести значение для ch. Иногда он закрывается после того, как я дал значение для температуры. Я пытался использовать tryParse и Convert.toInt. Но я не получаю никаких результатов. Кто-нибудь, кто может помочь мне с этим? Далее... Я просто ожидаю, что пользователь будет вводить только целочисленные значения (в качестве предположения). Использование Tryparse в этом случае не обязательно верно?
1 ответ
Проблема 1: Вы используете Console.Read()
метод для чтения одного символа из console.but здесь вам нужно нажать Enter key
вернуть введенное значение / символ, когда вы используете Console.Read()
method.so, когда вы нажимаете Enter Console.ReadLine()
Метод получит значение Пустая строка, а int.Parse() выбрасывает Исключение в Пустые строки.
Решение 1: вам нужно добавить Console.ReadLine()
после Console.Read()
способ прочитать первый символ. и тогда вы можете продолжить.
Попробуй это:
int ch =Console.Read();
Console.ReadLine(); //add this statement
Console.WriteLine("Enter a random integer");
int x = int.Parse(Console.ReadLine());
Проблема 2: Вы пытаетесь сравнить символы, введенные из консоли, с числами напрямую, что не работает, так как при чтении символа из консоли он сохранит его значение ASCII, а не прямое целое число. Например, если вы введете 1
из консоли он будет сохранен как 49
в целочисленной переменной ch
(Код ACII 1 равен 49), поэтому при сравнении с 1 он не совпадает.
Решение 2: так что вам нужно соответствовать его символьному значению. поэтому заключайте значения в одинарные кавычки, чтобы соответствовать точному значению, введенному в консоли.
Попробуйте это: заключите 1 и 2 в одинарные кавычки
switch (ch)
{
case '1':
---
break;
case '2':
-----
break;
}
Полный код:
int ch = Console.Read();
Console.ReadLine();//Add this line to complete reading of a character
Console.WriteLine("Enter a random integer");
int x = int.Parse(Console.ReadLine());
switch (ch)
{
case '1':
TempServiceRef.Service1Client s1 = new ConsoleTempApplication.TempServiceRef.Service1Client();
Console.WriteLine("Enter temperature");
string n = Console.ReadLine();
int param = int.Parse(n);
double result = s1.c2f(param);
Console.WriteLine(result);
Console.ReadLine();
break;
case '2':
TempServiceRef.Service1Client s2 = new ConsoleTempApplication.TempServiceRef.Service1Client();
Console.WriteLine("Enter temperature");
int param1 = int.Parse(Console.ReadLine());
double result1 = s2.f2c(param1);
Console.WriteLine(result1);
Console.ReadLine();
break;
default:
Environment.Exit(0);
break;
}