Написание чисел в группе 20-х годов - PullRequest
1 голос
/ 27 марта 2020

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

Пока что У меня есть это

        char a = ' ';

        for (int i = 1; i <= 1000; i++)
        {
            Console.WriteLine($"{i}");

            if (i % 20 == 0)
            {
                Console.WriteLine("Would you like to continue Y/N?: ");
                a = char.Parse(Console.ReadLine());

                if (a == 'y')
                {
                    Console.WriteLine($"{i}");
                    i++;
                }
                else
                {
                    Console.WriteLine("Error!");
                }
            }
        }

        Console.ReadKey();

Проблема в том, что он появляется как; 1..20, y / n, 20 22-40 ..

Со следующей группой она показывает 20 чисел, но она просто начинается с номера, на котором заканчивалась последняя группа, и пропускает 1. . (21,41,61 и др. c).

Ответы [ 3 ]

2 голосов
/ 27 марта 2020

Сосредоточение внимания на неправильном коде:

if (a == 'y')
{
    Console.WriteLine($"{i}");
    i++;
}
else
{
    Console.WriteLine("Error!");
}
  1. Вы уже напечатали i над этим кодом, поэтому нет смысла печатать его снова. Вы просто напечатаете это дважды. Таким образом, go 20 -> 20 -> 22.
  2. i++ работает против вас, потому что l oop уже позаботился об этом, так что в итоге вы увеличиваете i дважды за одну итерацию , Из-за этого вы фактически пропустите номер здесь. Как только вы исправите 1, будет go 20 -> 22, пропущено 21.
  3. Раннего выхода не будет, если пользователь не введет y.

Итак, давайте исправим это. Мы только хотим рассмотреть случаи, когда пользователь не хочет продолжать, и мы хотим экранировать l oop в этом случае:

if (a != 'y')
{
    break; // break out of the loop
}

И собрать все это вместе:

char a = ' ';

for (int i = 1; i <= 1000; i++)
{
    Console.WriteLine($"{i}");

    if (i % 20 == 0)
    {
        Console.WriteLine("Would you like to continue Y/N?: ");
        a = char.Parse(Console.ReadLine());

        if (a != 'y')
        {
            break;
        }
    }
}
Console.ReadKey();
2 голосов
/ 27 марта 2020

Если пользователь вводит y, вам не нужно ничего делать, просто дайте программе продолжиться. В других случаях вы можете напечатать ошибку или выйти, например:

for (int i = 1; i <= 1000; i++)
{
    Console.WriteLine($"{i}");

    if (i % 20 == 0)
    {
        Console.WriteLine("Would you like to continue Y/N?: ");
        a = char.Parse(Console.ReadLine());

        if (a != 'Y')
        {
            Console.WriteLine("OK, Bye!");
            Environment.Exit(0);
        }
    }
}
1 голос
/ 27 марта 2020

вам не нужно выводить число внутри "если" ...

вам не нужно увеличивать число внутри "если" ...

все вам нужен случай n ... подумайте об операторе break ... он завершает l oop early

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...