переменная в цикле for имеет разные значения в одном цикле (язык C) - PullRequest
0 голосов
/ 08 ноября 2019

В этих циклах у меня есть два разных значения, и я не знаю, почему это так, поскольку я не увеличиваю их размер. Я печатаю i в обоих циклах, но оно имеет большее значение при печати во внутреннем цикле и значение, которое оно должно иметь во внешнем цикле.

Редактировать: описание стерто, я переписал его только с соответствующимиинформация.

Можете ли вы сказать мне, почему это происходит?

int position = 0;
int size = 4;

for (int i = 0; i < size; i++)
{
    for (int j = 0; j < position; j++)
    {
        printf("    i = %d\n", i);
    }

    position++;

    printf("i = %d\n", i);
}

printf("\n");

Это то, что он печатает:

i = 0
    i = 1
i = 1
    i = 2
    i = 2
i = 2
    i = 3
    i = 3
    i = 3
i = 3

В то время как желаемый результат должен быть:

i = 0
i = 1
    i = 1
i = 2
    i = 2
    i = 2
i = 3
    i = 3
    i = 3
    i = 3

Ответы [ 3 ]

0 голосов
/ 08 ноября 2019

Чтобы получить код в цикле, выполняемом хотя бы один раз, вы можете использовать цикл do-while. Я пошел вперед и изменил это для вас. Кроме того, печать незапятого i до того, как цикл вернет вас к желаемому выводу.

int position = 0;
int size = 4;

for (int i = 0; i < size; i++)
{
    printf("i = %d\n", i);

    int j = 0;
    do {
        printf("    i = %d\n", i);
        j++;
    } while (j < position);

    position++;
}

printf("\n");

Редактировать: Ах, я вижу, вы снова изменили желаемый вывод! Это делает условие выполнения кода по крайней мере необходимым. Обычный цикл while делает свое дело:

int position = 0;
int size = 4;

for (int i = 0; i < size; i++)
{
    printf("i = %d\n", i);

    int j = 0;
    while (j < position) {
        printf("    i = %d\n", i);
        j++;
    }

    position++;
}

printf("\n");
0 голосов
/ 08 ноября 2019

Просто поместите вывод переменной i перед внутренним циклом.

#include <stdio.h>

int main(void) 
{
    int position = 0;
    int size = 4;

    for (int i = 0; i < size; i++)
    {
        printf("i = %d\n", i);

        for (int j = 0; j < position; j++)
        {
            printf("    i = %d\n", i);
        }

        position++;
    }

    printf("\n");

    return 0;
}

Выход программы:

i = 0
i = 1
    i = 1
i = 2
    i = 2
    i = 2
i = 3
    i = 3
    i = 3
    i = 3
0 голосов
/ 08 ноября 2019

Это потому, что вы создали условие нечетной переменной цикла с position. Первый круг в цикле i for, он пропускает внутренний цикл, затем увеличивает позицию на 1 и печатает i = 0. Затем на следующем круге, когда i равен 1, он выполняет внутренний цикл и т. Д.

Вот почему плохая идея использовать постоянно меняющееся условие в for циклах - это делает код намного сложнее для понимания.

...