【发布时间】:2022-01-15 00:42:57
【问题描述】:
void reflect(int height, int width, RGBTRIPLE image[height][width]) {
temp_array temp[width];
int row;
for (row = 0; row < height; row++)
{
for (int j = 0; j < width; j++)
{
temp[j].red = image[row][j].rgbtRed;
temp[j].green = image[row][j].rgbtGreen;
temp[j].blue = image[row][j].rgbtBlue;
}
for (int i = 0; i < width; i++)
{
image[row][i].rgbtRed = temp[width - i].red;
image[row][i].rgbtGreen = temp[width - i].green;
image[row][i].rgbtBlue = temp[width - i].blue;
}
}
return;
}
【问题讨论】:
-
嗨,我正在为 cs50 做这个 pset4,我目前正在参与“反射”。我想出了一个看似可行的解决方案,但在运行 check50 时我返回错误。为什么?当然,我的代码可能设计得不是很漂亮,但它会按原样返回所有测试照片的反射输出,但仍然没有通过 check50。我创建了一个 typedef 结构来存储临时像素颜色,然后我将它们以相反的顺序再次放入。 typedef struct { BYTE 红色;字节绿色;字节蓝; } temp_array;
-
"但是我在运行 check50 时返回错误。为什么?"因为一个或多个特定的测试用例失败了。如果您查看测试用例、预期的输出和错误的输出,您应该能够将相同的数据输入到您的程序中并逐步通过 debuffer。
-
为什么要创建一个新的
typedef?有一种类型可以用于此目的:RGBTRIPLE使用它。 -
一些提示:
temp[width - i]该索引在该循环中的范围是多少?在您将值设置为temp的循环中,它将具有什么范围?什么范围对您的数组定义有效?此外,对于交换 2 个像素,您不应复制整行,而只需使用 1 个单个临时变量。顺便说一句:您可以在一次分配中分配整个结构。无需单独分配每个字段。 -
最后:请将评论中的文字添加到帖子中。