PSET4 CS50反思作业;代码不合格的测试

问题描述 投票:0回答:1

我找不到办法解决这两个错误,尽管我的照片转出很好。如果有人能启发我,我将感激不尽。

这是我得到的报告。

:( reflect correctly filters 1x2 image expected "0 0 255/n255 0...", not "255 0 0/n0 0 2..." 反射正确过滤1x3图像 :) 反射正确过滤自己的镜像图像 :) 反射正确过滤3x3图像。 :( reflect correctly filters 4x4 image expected "100 110 120\n7...", not "100 110 120\n4..."

这是我的代码。

RGBTRIPLE tmp[width];
for (int i = 0; i < height; i++)
{
    for (int j = 0; j <= width / 2; j++)
    {
        tmp[j] = image[i][j];
        image[i][j] = image[i][width - 1 - j];
        image[i][width - 1 - j] = tmp[j];
    }
}
return;
c swap cs50
1个回答
0
投票

解决方法:1.在for循环中的条件需要一个小条件。

for循环中的条件需要稍加调整。

j < width / 2

了解原因。

对于1x2的图像,你有2个像素在一行,宽度是2。宽度是2.只需要1次迭代就够了。在以前的方案中,当j=0时执行第1次迭代,但第2次迭代也被执行,因为j=1仍然在条件范围内(等于width2)。第2次迭代是不必要的。你只是反射了两次,结果图像没有变化。

对于4x4的图像,也是类似的问题。当j=0和j=1时,应该用2次迭代来完成反射,但是当j=2时(j仍然等于或小于width2),执行第3次迭代,将第3个像素替换为第1个像素,这是错误的。因为你已经把它们替换了一次。

© www.soinside.com 2019 - 2024. All rights reserved.