Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 用于创建PGM图像的C参数编号_Arrays_C_Image_Visual Studio Code_Pgm - Fatal编程技术网

Arrays 用于创建PGM图像的C参数编号

Arrays 用于创建PGM图像的C参数编号,arrays,c,image,visual-studio-code,pgm,Arrays,C,Image,Visual Studio Code,Pgm,我必须用C语言为大学完成一项任务。该程序以PGM格式创建图像。该程序编译成功,但我无法正确运行该程序。在主函数的开头,if操作符需要2个argc,但是每次我尝试运行程序时,我只有一个argc,我得到了结果 错误:参数丢失或不正确,用法a3[imagefile] 代码是: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include &

我必须用C语言为大学完成一项任务。该程序以PGM格式创建图像。该程序编译成功,但我无法正确运行该程序。在主函数的开头,if操作符需要2个argc,但是每次我尝试运行程序时,我只有一个argc,我得到了结果

错误:参数丢失或不正确,用法a3[imagefile]

代码是:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <math.h>

const double PI = 3.1415926535897932;

int** loadImage (const char *filename, int* width, int* height);
bool saveImage (const char *filename, int **pixels,
                const unsigned int width, const unsigned int height);

/* *** task (a) *** */

int normalize(int value) {
  return 0;    // Dummy return
}

/* *** task (b) *** */

int** createImage(unsigned int width, unsigned int height, int value){
  
  return NULL;    // Dummy return
}

/* *** task (c) *** */

void freeImage(int** pixels, unsigned int width, unsigned int height){
  
}

/* *** task (d) *** */

int** inverter (int **pixels, int width, int height)
{
  
  return NULL;    // Dummy return
}

/* *** task (e) *** */

int** laplace (int **pixels, int width, int height)
{
  
  return NULL;    // Dummy return
}

/* *** task (f) *** */

int** rotate (int** pixels, int width, int height, double angle, int background)
{

  return NULL;    // Dummy return
}

int main (int argc, char **argv)
{
  if (argc == 2)
  {
    int width=0, height=0;
    int **image = loadImage (argv[1], &width, &height);
    if (image != NULL)
    {
      int **image1 = inverter (image, width, height);
      int **image2 = laplace (image, width, height);
      int **image3 = rotate (image, width, height, 150, 128);

      saveImage ("image0.pgm", image,  width, height);
      saveImage ("image1.pgm", image1, width, height);
      saveImage ("image2.pgm", image2, width, height);
      saveImage ("image3.pgm", image3, width, height);

      freeImage (image, width, height);
      freeImage (image1, width, height);
      freeImage (image2, width, height);
      freeImage (image3, width, height);
    }
  }
  else {
    printf ("Error: missing or bad parameters, usage a3 [imagefile]\n");
  }
  return 0;
}

/* *** Bild aus Datei laden *** */
int** loadImage (const char *filename, int* width, int* height)
{
  const char *delimiter = " \n\r\t";
  FILE *file = fopen (filename, "rt");
  int** pixels;
  bool isValid = true;

  if (file != NULL)
  {
    char line [80];
    int n = 0, params [3];

    if (fgets (line, 80, file) == NULL) isValid = false;
    if (strlen (line) != 3 || strncmp (line, "P2", 2)) isValid = false;
    while (isValid && fgets (line, 80, file) != NULL)
    {
      if (strlen (line) <= 71)
      {
        if (line[0] == '#') continue;
        char *p = strtok (line, delimiter);
        while (isValid && p != NULL)
        {
          if (n < 3)
          {
            int a = atoi (p);
            if (a <= 0) {isValid = false;}
            else {params[n++] = a;}
          }
          else
          {
            if (n == 3)
            {
              if (params[2] != 255) {isValid = false;}
              else {
                pixels = createImage (params[0], params[1], 0);
                *width = params[0];
                *height = params[1];
              }
            }
            if (n-3 < *width * *height)
            {
              int x = (n-3) % *width;
              int y = (n-3) / *width;
              int value = atoi (p);
              pixels[y][x] = normalize(value);
              n++;
            }
            else {isValid = false;}
          }
          p = strtok (NULL, delimiter);
        }
      }
      else { isValid = false;}
    }
    fclose (file);
    if (n-3 != *width * *height) {isValid = false;}
    if (!isValid) freeImage (pixels, *width, *height);
  }
  return isValid ? pixels : NULL;
}

/* *** Bild in Datei speichern *** */

bool saveImage (const char *filename, int **pixels, unsigned int width, unsigned int height)
{
  FILE *file = fopen (filename, "wt");

  if (file != NULL && pixels != NULL)
  {
    fprintf (file, "P2\n");
    fprintf (file, "%d %d\n", width, height);
    fprintf (file, "%d\n", 255);
    for (int y = 0; y < height; y++)
    {
      for (int x = 0; x < width; x++)
      {
        fprintf (file, "%d\n", pixels[y][x]);
      }
    }
    fclose (file);
    return true;
  }
  return false;
}

您的程序
a3.exe
需要一个作为文件名的参数。要从命令行运行它,请输入

.\a3.exe YourFilename

您的文件名
替换为您要使用的实际文件名。

什么值是
argc
?你怎么称呼这个程序?(即命令行?)我在主函数的开头打印了argc,并且
argc=1
。教授说我们应该用
gcc-Wall-oa3 a2.c-lm
编译这个程序,然后我用
\a2.exe
运行这个程序,添加一个for循环来打印参数的数量和它们的值。您可能会理解出了什么问题。请使用命令行!!找出这张照片不起作用的原因。谢谢大家!!
.\a3.exe YourFilename