Пока l oop ломается непреднамеренно - PullRequest
0 голосов
/ 03 мая 2020

Я на второй неделе обучения C#, поэтому я довольно новичок в программировании. Я должен сделать программу, которая возвращает наименьшее целое число из ряда случайных целочисленных входных данных. После ввода = 0 программа должна выйти из l oop. Мне разрешено использовать только циклы while и for. По какой-то причине моя программа выходит из l oop после второго ввода, и похоже, что ей даже не важно, есть ли «0» или нет. Не могли бы вы посмотреть, где я ошибся? Я ломал голову над этим. Извините, если этот вопрос уже был опубликован кем-то другим, но я нигде не нашел ответа на него.

PS: Для сравнения необходимо учесть нулевой вход. Итак, вот что я получил:

 class Program
 {
     static void Main()
     {
        int i = 0;
        int input = Int32.Parse(Console.ReadLine());
        int min = default;

        while (input != 0)
        {
            Console.ReadLine();
            if (i == 0)
            {
                min = input;
                break;
            }

            if (input < min && i !=0)
            {
                input = Convert.ToInt32(Console.ReadLine());
                min = input;
            } 
            i++;
        }
        Console.WriteLine(min);
    }

Ответы [ 2 ]

3 голосов
/ 03 мая 2020

Прежде всего вы захотите перечитать документацию для for- и while-loops. Там есть несколько полезных страниц, например для / , а .

Проблема

Причина, по которой ваш л oop перерывы - это то, что вы инициализируете i с помощью 0.

int i = 0; 

Внутри вашего l oop вы используете if -статаль, чтобы разбить l oop, если условие "i is 0" встречается.

if (i == 0)
{
    min = input;
    break;
}

Вводимые пользователем данные для каждой итерации l oop игнорируются вашей программой, поскольку вы никогда не сохраняете такую ​​информацию ни в одной переменной.

while (input != 0)
{
    Console.ReadLine(); 
    // ...
}

Возможное решение

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

  1. Объявить минимальное значение + присвоить ему максимальное значение
  2. Использовать while l oop и l oop пока не будет выполнено указанное c условие
  3. Считайте введенные пользователем данные и попробуйте преобразовать их в целое число
  4. Проверьте, равно ли значение 0
    • 4.1. Если значение равно 0, go с шагом 8
    • 4.2. Если значение не равно 0, go с шагом 5
  5. Проверьте, меньше ли значение текущего минимального значения
    • 5.1. Если значение меньше, go с шагом 6
    • 5.2. Если значение не меньше, go вернуться к шагу 3
  6. Установить новый минимум
  7. Go вернуться к шагу 3
  8. Break l oop
  9. Конечная программа

Программа, которая обрабатывает вышеуказанные шаги, может выглядеть следующим образом:

using System;

namespace FindMinimum
{
    public class Program
    {
        static void Main(string[] args)
        {
            // Declare minimum value + assign initial value
            int minValue = int.MaxValue;

            // Loop until something else breaks out
            while (true)
            {
                Console.WriteLine("Please insert any number...");

                // Read io and try to parse it to int
                bool parseOk = int.TryParse(Console.ReadLine(), out int num);

                // If the user did not provide any number, let him retry
                if (!parseOk)
                {
                    Console.WriteLine("Incorrect input. Please insert numbers only.");
                    continue;
                }

                // If the user typed in a valid number and that number is zero, break out of the loop
                if (parseOk && num == 0)
                {
                    break;
                }

                // If the user typed in a valid number and that number is smaller than the minimum-value, set the new minimum
                if (parseOk && num < minValue)
                {
                    minValue = num;
                }
            }

            // Print the result to the console
            Console.WriteLine($"Minimum value: {minValue}.");

            // Keep console open
            Console.ReadLine();
        }
    }
}
0 голосов
/ 03 мая 2020

Попробуйте:

       int input;
       Console.Write("Enter number:");
       input = Int32.Parse(Console.ReadLine());
       int min = input;

       while(true)
       {
           if (input == 0)
               break;

           if (min > input)
               min = input;

           Console.Write("Enter number:");
           input = Int32.Parse(Console.ReadLine());
       }

       Console.WriteLine(min);
       Console.ReadKey();

Надеюсь, это поможет.

...