0

そのため、イタリア国旗のイメージ (左から右、緑、白、赤の順に 3 つの垂直バー) を与える ppm ファイルを作成する必要があります。画像は 600 x 400 である必要があります。(列ごとに) コードを何度も書き直そうとしましたが、画像は垂直ではなく水平に配置された 3 つのバーだけです。また、ラインは完全に水平ではありません。しかし、最大の問題は、緑、白、赤のバーが垂直にならないのはなぜですか? どんな助けでも大歓迎です。

これが私のコードです:

#include <stdio.h>

int main() {
   printf("P6\n");
   printf("%d %d\n", 600, 400);
   printf("255\n");

   int height, widthGreen, widthWhite, widthRed, i, j;
   unsigned char Rcolor, Bcolor, Gcolor;

   widthGreen = 200;
   widthWhite = 400;
   widthRed = 600;
   height = 400;

   for (j = 0; j < height; j++) {
      for (i = 0; i < widthGreen; i++) {
         Rcolor = 0;
         Gcolor = 128;
         Bcolor = 0;

         printf("%c%c%c", Rcolor, Gcolor, Bcolor);
      }
   }

   for (j = 0; j < height; j++) {
      for (i = 201; i <= widthWhite; i++) {
         Rcolor = 255;
         Gcolor = 255;
         Bcolor = 255;

         printf("%c%c%c", Rcolor, Gcolor, Bcolor);
      }
   }

   for (j = 0; j < height; j++) {
      for (i = 401; i <= widthRed; i++) {
         Rcolor = 255;
         Gcolor = 0;
         Bcolor = 0;

         printf("%c%c%c", Rcolor, Gcolor, Bcolor);
      }
   }

   return (0);
}
4

2 に答える 2

0

なぜ printf を使用しているのですか? i および j インデックスを使用して、配列を構築およびインデックス付けする必要があります。あなたのコードでは、変数 i と j はループ カウンターとしてのみ使用され、座標としては使用されません。

何をしているの :

for each line
     print some green

for each line
    print some white

for each line
    print some red

あなたがすべきこと:

for each line
    print some green
    print some white
    print some red

j の代わりに行、i の代わりに col (列の場合) のように、より意味のある変数名を使用することもできます。

于 2013-10-29T07:56:47.713 に答える