Путаница с оценкой состояния и шагами цикла 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 звезды.