我试图通过PPM在C中设计丹麦国旗,但我似乎无法使我的功能工作,我想找到一种更有效的方法将所有地方循环在一起,而不是全部如果/ 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);
}
由于某种原因,我的功能将编译...任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
了解如何使用逻辑运算符&&
和||
。
无需为“左红色,中间白色,右红色”添加单独的检查,您可以假设您正在绘制红色并仅检查中间部分。
因为你想在[x> 0.3&amp;&amp; x <= 0.4] 或 [y&gt; 0.3&amp;&amp; y&lt; = 0.4],您可以将其连接到单个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图像)。