【问题标题】:Creating a flag in C through PPM通过 PPM 在 C 中创建标志
【发布时间】:2013-11-15 05:57:52
【问题描述】:

我正在尝试通过 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);
}

另外由于某种原因,我的函数会编译...有人也可以帮助我解决这个问题吗?

【问题讨论】:

    标签: c loops if-statement printf ppm


    【解决方案1】:

    了解如何使用逻辑运算符 &amp;&amp;||

    没有必要为“左红、中白、右红”添加单独的检查,您可以假设您正在绘制红色并且只检查中间部分。

    由于您想在 [x > 0.3 && x 或 [y > 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 <i>x</i> 语句并没有帮助,因为它不会计算您感兴趣的任何内容。)

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

    在修复了一些小问题后(例如,Pixel 输出由空格分隔的三个数字,但如果你第二次调用它,第一个新数字将与前一个数字保持一致)我得到了这个:

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

    【讨论】:

    • 啊,非常感谢!!!我一直在试图弄清楚每个边框的比例,我正在使用维基百科....看起来我在使用它们的宽高比时有点不对劲。
    • 在我的书中,他们一直使用 i,所以这是我一直遵循的,但我绝对明白你从哪里来的 y 位置。再次感谢! @Jongware
    • 如果这回答了你的问题,你可以考虑接受它。
    猜你喜欢
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2022-01-06
    • 2023-01-16
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    相关资源
    最近更新 更多