将数组从文件读入数组然后将其打印到另一个文件时遇到问题

时间:2014-03-18 16:23:19

标签: c file printing ppm

嘿伙计们我试图让这段代码在c中工作,我有一个看起来像这样的数据文件:

123 456 789 101 121 131 415....

它是图像的数据,这些数字在256X128的网格中,我尝试使用嵌套的for循环读取这些数字并以相同的方式打印它们但应该有的地方输出文件中的相同网格实际上是:

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

我不确定我的代码中需要更改哪些内容才能解决此问题,因为我是编程新手,这是我第一次尝试代码时很抱歉,如果它不太清楚

#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;
    }
}

谢谢:)

2 个答案:

答案 0 :(得分:0)

我不确定这是否是您代码中唯一的问题,但您声明了R数组两次,您将数据读入第一个数组,并且您从 - 未初始化 - 第二个数据中写入数据阵列。移动声明

double R[128][256];

在main中的第一个块之前,并删除R的第二个声明。

答案 1 :(得分:0)

至少需要进行三项更改:

  • 您需要将"%d"中的第一个 fscanf更改为"%lf",因为&R[n][m]是指向{{1}的指针}}

  • 并将double中的第二个 "%d"更改为fprintf

  • 并移动"%f"以便两个部分使用相同的数组(并删除第二个定义)。

或者,将double R[128][256];声明为R而不是int

编辑:您使用的编译器是什么?最广泛使用的编译器应该给你一个警告。例如,double使用标准开关提供警告:

  

第1行:警告:#include指令结束时的额外令牌
  第18行:警告:格式&#39;%d&#39;期望类型&#39; int *&#39;,但参数3的类型为&#39; double *&#39;
  第32行:警告:格式&#39;%d&#39;期望类型&#39; int&#39;,但参数3的类型为&#39; double&#39;

(加上对gcc)原型的投诉。

相关问题