问题出在你在循环中的 `printf` 语句。每次循环都会输出一个坐标点,但你在循环前没有重置 `image` 的值,导致每次循环中都会将 `image` 的值设为 `BLACK`,这就是为什么你得到的输出是从 (17,25) 或 (18,26) 开始的原因。
解决方法很简单,只需要将 `image = BLACK;` 这行代码放在 `while` 循环的外面即可。这样,每次循环开始时都会将 `image` 的值重置为 `BLACK`,然后再根据算法计算新的坐标点并打印。修改后的代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#define BLACK 0
int image;
int Left;
void drawLine(int y0, int x0, int y1, int x1) {
int dx = abs(x1 - x0);
int dy = abs(y1 - y0);
int sx = x0 < x1 ? 1 : -1;
int sy = y0 < y1 ? 1 : -1;
int err = dx - dy;
int e2;
image = BLACK;
while (1) {
if (x0 == x1 && y0 == y1) {
break;
}
printf("(%d,%d)\n", y0, x0);
e2 = 2 * err;
if (e2 > -dy) {
err -= dy;
x0 += sx;
}
if (e2 < dx) {
err += dx;
y0 += sy;
}
}
}
int main() {
drawLine(12, 20, 40, 50);
return 0;
}
请注意,添加 `#include <stdlib.h>` 头文件以包含 `abs` 函数的声明。此函数用于计算两个数的绝对值。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |