【发布时间】:2020-10-16 07:43:25
【问题描述】:
我正在尝试用 'while' 循环替换我的 'for' 循环,但我得到了不同的输出。
for 循环:
for(int row = mlx->shot->height - 1; row >= 0; row--)
{
y = 0;
for(int col = 0; col < mlx->shot->width; col++)
{
int red = (mlx->tex.img_data[x * w + y] >> 16) & 0xFF;
int green = (mlx->tex.img_data[x * w + y] >> 8) & 0xFF;
int blue = mlx->tex.img_data[x * w + y] & 0xFF;
buf[row * mlx->shot->width_in_bytes + col * 3 + 0] = blue;
buf[row * mlx->shot->width_in_bytes + col * 3 + 1] = green;
buf[row * mlx->shot->width_in_bytes + col * 3 + 2] = red;
y++;
}
x++;
}
这里的输出很完美
我的 while 循环:
int row;
row = mlx->shot->height - 1;
while (row >= 0)
{
y = 0;
col = 0;
while (col < mlx->shot->width)
{
int red = (mlx->tex.img_data[x * w + y] >> 16) & 0xFF;
int green = (mlx->tex.img_data[x * w + y] >> 8) & 0xFF;
int blue = mlx->tex.img_data[x * w + y] & 0xFF;
buf[row * mlx->shot->width_in_bytes + col * 3 + 0] = blue;
buf[row * mlx->shot->width_in_bytes + col * 3 + 1] = green;
buf[row * mlx->shot->width_in_bytes + col * 3 + 2] = red;
col++;
y++;
}
row--;
x++;
}
但在这里我得到一个:1163 segmentation fault
编辑:变量的其余部分已经声明。 这是孔函数:
void screno(t_mlx *mlx)
{
int x ;
int y ;
int row;
int col;
x = 0;
y = 0;
row = mlx->shot->height - 1;
col = 0;
unsigned char* buf = malloc(mlx->shot->imagesize);
while (row >= 0)
{
y = 0;
col = 0;
while (col < mlx->shot->width)
{
int red = (mlx->tex.img_data[x * w + y] >> 16) & 0xFF;
int green = (mlx->tex.img_data[x * w + y] >> 8) & 0xFF;
int blue = mlx->tex.img_data[x * w + y] & 0xFF;
buf[row * mlx->shot->width_in_bytes + col * 3 + 0] = blue;
buf[row * mlx->shot->width_in_bytes + col * 3 + 1] = green;
buf[row * mlx->shot->width_in_bytes + col * 3 + 2] = red;
col++;
y++;
}
row--;
x++;
}
/*for(int row = mlx->shot->height - 1; row >= 0; row--)
{
y = 0;
for(int col = 0; col < mlx->shot->width; col++)
{
int red = (mlx->tex.img_data[x * w + y] >> 16) & 0xFF;
int green = (mlx->tex.img_data[x * w + y] >> 8) & 0xFF;
int blue = mlx->tex.img_data[x * w + y] & 0xFF;
buf[row * mlx->shot->width_in_bytes + col * 3 + 0] = blue;
buf[row * mlx->shot->width_in_bytes + col * 3 + 1] = green;
buf[row * mlx->shot->width_in_bytes + col * 3 + 2] = red;
y++;
}
x++;
}*/
ft_printf("Taking ScreenShoot....\n");
FILE *fout = fopen("screenshot.bmp", "wb");
ft_printf("ScreenShot Has been saved under The name 'screenshot.bmp']\n");
fwrite(mlx->shot->header, 1, 54, fout);
fwrite((char*)buf, 1, mlx->shot->imagesize, fout);
fclose(fout);
free(buf);
}
当我使用 for 循环时,代码工作得非常好。 但是使用 while 循环,我得到一个错误或图像保存为空。
【问题讨论】:
-
int row;->int row = mlx->shot->height - 1;。在您的代码中,您永远不会初始化row。 -
但不管怎样,
for的版本风格更好,没有理由用while循环代替for循环。 -
我必须用while循环替换它,因为在项目的主题中for循环是被禁止的
标签: c for-loop while-loop