Если входное значение не является числом, оно должно быть пропущено в c # - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь написать код, в котором непрерывный ввод цифр с клавиатуры до тех пор, пока пользователь не введет 0. После этого программа должна отобразить количество ранее введенных чисел.

Правило:

  • Получить все входные значения из консоли
  • Если входное значение не является числом, его следует пропустить
  • Использовать только циклы while или do-while

мой код работает для цифр, но если мой ввод буквенный, он действует как ввод 0, перестает работать Я пытаюсь игнорировать буквы и продолжаю, пока ввод не будет 0

это мой код:

using System;

namespace practice_01
{
class Program
{
    static void Main(string[] args)
    {
        //global variable
        int numberFromInput;
        int count = 0;
        do
        {
            //input form user
            Console.WriteLine("Please enter number: ");
            var userInput = Console.ReadLine();

            //check if input is number
            var isNumber = int.TryParse(userInput, out numberFromInput);
            count++;

            //if it's letter just skip
            if (!isNumber)
            {
                continue;
            }

            // input 0 is not part of count
            if(numberFromInput == 0)
            {
                count = count - 1;
            }
        } 
        while (numberFromInput != 0);
        Console.WriteLine($"Count of entered numbers before zero: {count}");

    }
}

}

1 Ответ

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

У вас две проблемы. Во-первых, вы увеличиваете count, как только получаете ввод, так что он будет увеличиваться даже для буквы. Во-вторых, ваше условие проверяет, является ли numberFromInput значением 0, поэтому даже при сбое TryParse() это значение по-прежнему равно 0, поэтому вы выходите из цикла.

Это исправит оба:

bool isNumber = true;
do
{
    //input form user
    Console.WriteLine("Please enter number: ");
    var userInput = Console.ReadLine();

    //check if input is number
    isNumber = int.TryParse(userInput, out numberFromInput);

    //if it's letter just skip
    if (!isNumber)
    {
        isNumber = true;
        continue;
    }

    // input 0 is not part of count
    if (numberFromInput == 0)
    {
        break;
    }
    count++;
}
while (isNumber);

Обратите внимание, что, если isNumber равно false, мы устанавливаем его обратно в true перед выполнением continue в порядкеоставаться в курсе. И, наконец, наличие count++ после break в случае, если ввод равен нулю, устраняет необходимость в настройке счетчика и просто позволяет вырваться из цикла.

...