Не могу использовать значение из цикла while - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу проверить, если они вводят числа, а затем после этого подтвердить, что число находится в диапазоне от 20 до 50, а затем вычислить сумму всех положительных чисел до этого.

int i, sum = 0;

var valid = false;
while (!valid)
{
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("Please enter a number between 20 and 50(50 is included)");
    Console.WriteLine("Only Numbers will be accepted");
    Console.ForegroundColor = ConsoleColor.White;
    Console.WriteLine("---------------------");
    Console.ForegroundColor = ConsoleColor.Yellow;

    var val = Console.ReadLine();
    valid = !string.IsNullOrWhiteSpace(val) &&
        val.All(c => c >= '0' && c <= '9');
    Console.WriteLine(val + " is what you entered");
}

Int16 num = int.Parse(val);
if (num > 20 && num <= 50)
{
    for (i = 0; i <= num; i++)
    {
        sum = sum + i;
    }
    Console.ForegroundColor = ConsoleColor.White;
    Console.WriteLine("---------------------");

    Console.ForegroundColor = ConsoleColor.Cyan;
    Console.WriteLine("Sum of all numbers before "+ Convert.ToString(num) + " is " + Convert.ToString(sum));

    Console.ForegroundColor = ConsoleColor.White;
    Console.WriteLine("---------------------");
    Console.ForegroundColor = ConsoleColor.Green;
}
else
{

    Console.ForegroundColor = ConsoleColor.White;
    Console.WriteLine("---------------------");

    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("Number is not within the limits of 20-50!!!");

    Console.ForegroundColor = ConsoleColor.White;
    Console.WriteLine("---------------------");
    Console.ForegroundColor = ConsoleColor.Green;
}

1 Ответ

1 голос
/ 16 апреля 2020

Первый: посмотрите на это: https://en.wikipedia.org/wiki/Gauss_sum для суммирования.

Второй: код:

static void Main(string[] args)
        {
            var valid = false;

            while (!valid)
            {
                var line = Console.ReadLine();

                if(Int16.TryParse(line, out var numericValue))
                {
                    if(numericValue >= 20 && numericValue <= 50)
                    {
                        int sum = Calculate(numericValue);
                        valid = true;
                    }
                }
                else
                {
                    // It was not a number or outsinde the range of Int16
                }
            }
        }

        private static int Calculate(int num)
        {
            return (num * (num + 1) / 2);
        }

Int16.TryParse мягко проверяет, является ли значение из Console.ReadLine () числом c в диапазоне Int16 или нет. Для суммирования я использую сумму Гаусса в Calculate ().

Также рассмотрим переменные класса и объекта.

...