我正在尝试通过PPM在C语言中设计丹麦国旗,但是我似乎无法让我的函数正常工作,而是想找到一种更有效的方法将所有位置循环在一起,而不是全部执行if / else if陈述。

 for(i=0; i < height; i++){
  for(x=0; x < width; x++){
    if(x <= width *.3 && i <= height * .3)
   {
     printf("%i", Pixel(255,51,51));
   }
    else if(x<= width * .1 && i <= height *.1)
   {
     printf("%i",Pixel(0,0,0));
   }
    else if(x <= width * .405 && i <= height *.3)
   {
     printf("%i", Pixel(255,51,51));
   }
    else if(x <= width * .4 && i <= height)
   {
     printf("%i", Pixel(0,0,0));
   }
    else
   {
     printf("%i", Pixel(255,51,51));
   }
 }
}


这是我的身体,我不知道如何循环在一起,而不是创建大量的if / else语句,而一半时间可能不会起作用。

void Pixel(int red, int green, int blue){
  printf("%i %i %i", red, green, blue);
}


同样由于某种原因,我的函数将被编译...有人可以帮我解决这个问题吗?

最佳答案

阅读有关如何使用逻辑运算符&&||的信息。

无需为“左红,中白,右红”添加单独的检查,您可以假设您正在绘制红色,而仅检查中间部分。

由于要在[x> 0.3 && x 0.3 && y if检查。黑色边框也是如此-只需要检查一下即可。

if (x < width * .1 || y < height * .1 || x > width * .9 || y > height * .9)
  ..black..
else
  if ((x > width *.3 && x <= width * .4) || (y > height *.3 && y <= height * .4))
    ..white..
  else
    ..red..


另外:Pixel例程已经打印了RGB值,因此在调用它时无需再次尝试。现在发生的是

printf("%i", Pixel(255,51,51));


首先打印R,G,B值,然后尝试打印调用Pixel函数的“结果”。这失败,因为Pixel不返回值。您的编译器应该已经对此发出警告,因此请检查您的编译设置。 (但是请注意,在该函数中添加return x语句无济于事,因为它不会计算出您不感兴趣的内容。)

最后,强烈建议使用y而不是i来迭代一个明显的Y值。我注意到我在解释中“本能地”使用了它。

解决了一些较小的问题后(​​例如,Pixel输出三个数字,中间用空格隔开,但是如果您第二次调用它,则第一个新数字将保留前一个数字),我得到了:



以PPM格式显示,可以在Photoshop中正确打开(然后转换为PNG,因为SO不喜欢PPM图像)。

关于c - 通过PPM在C中创建标志,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19994469/

10-13 22:31