Путаница с оценкой состояния и шагами цикла for

void draw_diamond(int n)
{
int mid_pos = ceil((double)n / 2);
int left_spaces = mid_pos-1;
int line_stars = 1;

putchar(10);
//printing from top through the middle of the diamond
for(line_stars, left_spaces ; line_stars <= n; line_stars+=2, left_spaces--);
{
    //printing the left_spaces
    for(int i=1; i<=left_spaces; i++)
        putchar(32);

    //printing the line_stars
    for(int i=1; i<=line_stars; i++)
        putchar('*');
    putchar(10);
}

...

У меня проблема здесь, когда я step into for loop в первый раз ничего не происходит, для второго for loop step is applied например: если я pass 1 to n затем:

mid_pos = 1; left_spaces = 0; line_stars = 1;

он идет внутри цикла с помощью: left_spaces=-1; line_stars=3;

for loop печатает 3 звезды, где следует печатать только 1.

Я в замешательстве, я был бы признателен, если бы кто-нибудь мог помочь.

1 ответ

Решение

О, берегите подлую точку с запятой:

for(line_stars, left_spaces ; line_stars <= n; line_stars+=2, left_spaces--);
                                                                            ^
                                                                            |

Это заканчивается твой for заявление. Цикл просто будет работать до line_stars больше, чем n, К концу, line_stars теперь будет равно 3 (потому что оно увеличено на 2). left_spaces будет -1.

Теперь выполнится весь ваш код, заключенный в фигурные скобки. Первый for цикл не будет работать вообще, но второй будет работать с 1 до line_stars и, как мы знаем, line_stars 3, поэтому мы получаем 3 звезды.

Другие вопросы по тегам