Ввод не в правильном формате

Я хочу прочитать двойное значение и целое значение из консольного приложения в 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;
        }
Другие вопросы по тегам