0
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);
}

...

ここで問題が発生しました。初めての場合、何も起こりません。たとえば、2 番目のstep into場合は次のようになります。for loopfor loop step is appliedpass 1 to n

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

次のようにループ内に入ります。 left_spaces=-1; line_stars=3;

for loop3つ星を印刷しますが、1つだけ印刷する必要があります。

困っています、どなたかお役に立てれば幸いです。

4

1 に答える 1

5

うーん、卑劣なセミコロンに気をつけてください:

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ループはまったく実行されませんが、2 番目のループは 1 から 3 になるまで実行されるline_starsためline_stars、3 つの星が出力されます。

于 2012-12-26T00:31:53.637 に答える