Ошибка простой программы C #. Не удается заставить консоль обработать мой запрос else statement

#c#

#c#

Вопрос:

Я использовал Try.Parse, чтобы убедиться, что программа принимает только целые числа. Когда я ввожу целое число, это работает и переходит к следующей части моей программы, но когда я ввожу десятичное число, программа переходит к оператору else, как и должно быть, где говорится, что десятичные дроби недопустимы, и запрашивается целое число. Поэтому, когда я запускаю программу и ввожу целое число, она просто продолжает запрашивать все больше и больше целых чисел и не учитывает, что я только что ввел целое число. Итак, после ввода десятичной дроби я попадаю туда. Затем я ввожу целое число, и он продолжает воспроизводить мой запрос на другое целое число.

Я только начал кодировать, так что простите меня, если это очень просто, но я не могу обмозговать это. Я хочу, чтобы компьютер воспринял и обработал то, что я ввел в виде целого числа, и перешел к следующему оператору.

Объяснение было бы действительно полезным! заранее благодарю вас.

Комментарии:

1. inputcost никогда не меняется.

2. Хорошо, вы вызываете int. Попробуйте выполнить Parse() два раза подряд с одинаковыми параметрами. В первый раз вы сохраняете возвращаемое значение как result . Затем вы называете это условием a while . Если result равно false, тело while никогда не будет выполнено, никогда . Единственное другое место, которое вы проверяете на result ложность, находится внутри цикла while, что, как вы убедились, в этом случае не может произойти.

3. Также вы можете написать if (result) вместо if (result == true) .

Ответ №1:

вам необходимо обновить result и inputcost внутри цикла

 while (!result)
{
       Console.Write("Please Enter A Valid Integer Value");
       Console.WriteLine();
       inputcost = Console.ReadLine();
       result = int.TryParse(inputcost, out validcost);

 }

 Console.Write("Valid Value");
  

Ответ №2:

Значение inputcost задается в вашем коде только один раз. Вам нужно обновить его в вашем цикле while.

Смотрите предложение false в цикле while:

статическая пустота Main(строка[] аргументов) {

     string inputcost;
    string inputmoney;
    int validcost;

    Console.Write("Please Enter The Cost, In Pennies, Of The Item You Have Purchased: ");
    inputcost = Console.ReadLine();

    bool result = int.TryParse(inputcost, out validcost);
    while (!int.TryParse(inputcost, out validcost))
    {
        if (result == true)
        {
            Console.Write("Valid Value");
        }
        if (result == false)
        {
            Console.Write("Please Enter A Valid Integer Value");
            Console.WriteLine();
            inputcost = Console.ReadLine();
        }

    }
  

Комментарии:

1. Как вы думаете, сколько раз будет выполняться этот while блок цикла, если result значение false?