1

皆さん、このコードを C で動作させようとしています。次のようなデータ ファイルがあります。

123 456 789 101 121 131 415....

それは画像のデータです。これらの数値は 256X128 のグリッドにあります。ネストされた for ループを使用してこれらの数値を読み込んで同じ方法で印刷しようとしていますが、出力ファイルに同じグリッドがあるべき場所は実際には次のとおりです。

-858993460-858993460-858993460-858993460-858993460-858993460-858993460-858993460...

私はプログラミングが初めてで、これはコードでの最初の試みの1つであるため、これを修正するためにコードで何を変更する必要があるかわかりません。明確でない場合は申し訳ありません

#include <stdio.h>;

#define height 128
#define width 256
#define MAX 255
char magic[] = "P3";

int main()
{
    {
    int n, m;
    double R[128][256];
    FILE *red = NULL;
    red = fopen ("picture.red", "r");           //read infile//
        for (n=0; n<128; n++) 
            {
            for (m=0; m < 256; m++)
                fscanf(red, "%d", &R[n][m]);    //scan in grid//
        }
        fclose (red);
    }

    {
    int n,m;
    double R[128][256];
    FILE *pfile = NULL;
    pfile = fopen ("myfile.ppm", "w");          //create new file//
        fprintf(pfile, "%s\n%d %d\nNorman Norm\n%d\n", magic, width, height, MAX);
        for (n=0; n<128; n++)
            {                   //print header for outpute file//
            for (m=0; m<256; m++)
                fprintf (pfile, "%d", R[n][m]); //print grid into output file//
            fprintf (pfile, "\n");
        }
        fclose(pfile);                          //close output file//
return 0;
    }
}

ありがとう :)

4

2 に答える 2

0

これがコードの唯一の問題かどうかはわかりませんが、R配列を 2 回宣言し、データを最初の配列に読み込み、初期化されていない 2 番目の配列からデータを書き込みます。宣言を移動

double R[128][256];

main 内の最初のブロックの前に、 の 2 番目の宣言を削除しRます。

于 2014-03-18T16:31:57.297 に答える