我正在尝试通过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/