如果输入值不是数字,则应在c#中将其跳过

问题描述 投票:0回答:1

我想编写一个代码,在该代码中,从键盘连续输入数字,直到用户输入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}");

    }
}

}

c# .net if-statement do-while
1个回答
2
投票

您有两个问题。首先,一旦获得输入,便要递增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);

请注意,如果isNumberfalse,则在进行true之前将其设置回continue,以保持循环状态。最后,在输入为零的情况下将count++ after设置为break消除了对计数器的调整需求,并简单地让您跳出了循环。

© www.soinside.com 2019 - 2024. All rights reserved.