C # - Цикл не будет принимать нечисловой ввод после Convert.ToInt32 (...) - PullRequest
0 голосов
/ 28 февраля 2012

Когда я пытаюсь ввести строку выхода, ххх, почему выдается исключение? Он работает в цикле while , но не в цикле do ... while .

После преобразования в целое число строковая переменная позволяет использовать только числовые символы (например, -999) для выхода из цикла do ... while . Но я хочу сделать переменную управления циклом словом вроде «выход», а не цифрами. Как я могу это сделать?

Вот мой код.

using System;
namespace StringInputPractice
{
    class StringInputPractice
    {
        static void Main()
        {
            // Declarations

            string inValue;
            int first;
            int second;
            int sum;

            do
            {
                Console.Write("\nEnter the first number. (Type \"xxx\" to exit):   ");
                inValue = Console.ReadLine();

                first = Convert.ToInt32(inValue);   //@@@@@
                Console.Write("\nEnter the second number. (Type \"xxx\" to exit):   ");
                inValue = Console.ReadLine();
                second = int.Parse(inValue);

                sum = first + second;

                Console.WriteLine("\nThe sum of {0} and {1} is {2}.", first,
                    second, sum);

                /* Things I've tried inside do { } and that don't work */

                //inValue = "";
                //inValue = null;
                //inValue = inValue.ToString();
                //inValue = first.ToString();
                //inValue = second.ToString();
            }

            while (inValue != "xxx");   /*If you enter a non-numeric string,
                                         * an exception is thrown at
                                         * @@@@@ above.
                                         */

            Console.ReadLine();
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 28 февраля 2012

Попробуйте: используйте int.TryParse вместо Convert.ToInt32

public void myfun()
        {
            string inValue;
            int first;
            int second;
            int sum;

            do
            {
                Console.Write("\nEnter the first number. (Type \"xxx\" to exit):   ");
                inValue = Console.ReadLine();

                if (int.TryParse(inValue, out first))
                {
                   // first = Convert.ToInt32(inValue);   //@@@@@
                    Console.Write("\nEnter the second number. (Type \"xxx\" to exit):   ");
                    inValue = Console.ReadLine();
                    if(int.TryParse(inValue, out second))
                    {
                   // second = int.Parse(inValue);

                    sum = first + second;

                    Console.WriteLine("\nThe sum of {0} and {1} is {2}.", first,
                        second, sum);
                    }
                }
                /* Things I've tried inside do { } and that don't work */

                //inValue = "";
                //inValue = null;
                //inValue = inValue.ToString();
                //inValue = first.ToString();
                //inValue = second.ToString();
            }

            while (inValue != "xxx");   /*If you enter a non-numeric string,
                                     * an exception is thrown at
                                     * @@@@@ above.
                                     */

            Console.ReadLine();
        }
1 голос
/ 28 февраля 2012

Какую программу вы используете для кодирования?Большинство программ позволяют отлаживать ваше приложение.Это означает, что вы можете заморозить программу и запускать ее построчно.В каждой строке вы можете проверить значения переменных, а если есть исключение - вы сможете увидеть его.

Ваша ошибка вызвана этой строкой: first = Convert.ToInt32(inValue);

Вы должны сначала убедиться, что вы не конвертируете буквы в числа (потому что это вызовет исключение).Вы можете попробовать Int32.TryParse () или другие варианты.

0 голосов
/ 28 февраля 2012

Как вы ожидаете, что xxx будет преобразован в число?Это невозможно!

Что бы я сделал:

Сразу после получения inValue создайте оператор if, который проверяет, является ли это xxx, как в вашем while (), если true, то break;петля

...