У вас две проблемы. Во-первых, вы увеличиваете 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
в случае, если ввод равен нулю, устраняет необходимость в настройке счетчика и просто позволяет вырваться из цикла.