Требуется две попытки разорвать мой цикл - PullRequest
1 голос
/ 08 октября 2019

Я делаю курс Удеми и пытаюсь выполнить упражнение, в котором я прошу пользователя ввести число или разорвать цикл, если я напишу «выйти». После зацикливания мне нужно сложить все числа.

Я почти все заработал, но мне нужно написать "quit" два раза , чтобы он сломался, и я не понимаю, почему. Цени любую помощь

int[] total = new int[10];
int number;
int counter = 0;
Console.WriteLine("Write up to 10 number or 'quit' to exit early");
while (counter < 10)
{
    bool success = int.TryParse(Console.ReadLine(), out number);
    if (success == true)
    {
        total[counter] = number;
        counter++;
    } else if (Console.ReadLine() == "quit")
    {
        break;
    } else
    {
        Console.WriteLine("Wrong input.");
    }
}
int sum = total.Sum();
Console.WriteLine("The sum is {0}", sum);

1 Ответ

12 голосов
/ 08 октября 2019

Каждый экземпляр Console.ReadLine() будет читать отдельную строку . Вы должны прочитать значение один раз в верхней части цикла.

В данный момент ваш код делает это:

  1. Чтение строки (запрос ввода пользователя).
  2. Может ли он быть разобран в int?
  3. Считать строку (запросить пользовательский ввод снова )
  4. Это равно "выйти"? Да.
  5. Перерыв

Вы должны прочитать строку один раз за итерацию цикла:

while (counter < 10)
{
    string line = Console.ReadLine();
    bool success = int.TryParse(line, out number);
    if (success == true)
    {
        total[counter] = number;
        counter++;
    }
    else if (line == "quit")
    {
        break;
    }
    else
    {
        Console.WriteLine("Wrong input.");
    }
}

Теперь будет запрашиваться ввод данных пользователем один раз и сохраните результат в line. Затем вы можете выполнить любые проверки этого значения перед итерацией.

...