Каковы альтернативы для «продолжить» и «перерыв»? в C - PullRequest
1 голос
/ 25 марта 2020
#include <stdio.h>

int c, i, n, digit_cnt = 0, cnt = 0, total = 0;

int main(void)
{
    while (c = getchar())
    {
        if (c == 'E')
            break;
        ++cnt;
        if (c >= '0' && c <= '9')
            ++digit_cnt;
    }

    i = -5;
    n = 50;
    while (i < n)
    {
        ++i;
        if (i == 0)
            continue;
        total += i;
        printf("i = %d and total = %d\n", i, total);
    }
    return 0;
}

Я хочу избежать использования разрывов и продолжения. Какими способами можно заставить эти два фрагмента кода работать одинаково, без использования разрывов и продолжений?

Ответы [ 2 ]

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

Если вы хотите избежать операторов break и continue, переосмыслите лог c вашего кода.

Вместо проверки на E внутри l oop и использования break, проверить в контрольном выражении для оператора while. Обратите внимание, что getchar() может вернуть EOF; сбой ввода приводит к тому, что getchar() возвращает EOF при последующих вызовах, и это приводит к тому, что отправленный код становится бесконечным l oop. Возможно, вы захотите обработать EOF после l oop, если это является причиной выхода.

while ((c = getchar()) != 'E' && c != EOF)
    {
        ++cnt;
        if (c >= '0' && c <= '9')
            ++digit_cnt;
    }

Вместо проверки, чтобы увидеть, если i == 0, а затем с помощью continue, проверьте, чтобы посмотрите, если i != 0, а затем сделайте что-нибудь:

    if (i != 0) {
        total += i;
        printf("i = %d and total = %d\n", i, total);
    }
0 голосов
/ 25 марта 2020

Как насчет этого:

int main(void)
{
    while ((c = getchar()) != 'E')
    {
        ++cnt;
        if (c >= '0' && c <= '9')
            ++digit_cnt;
    }

    i = -5;
    n = 50;
    while (i < n)
    {
        ++i;
        if (i != 0)
        {
            total += i;
            printf("i = %d and total = %d\n", i, total);
        }
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...