我正在尝试使用C来执行某种笛卡尔坐标系统在命令行上打印。不幸的是,在尝试将特殊字符插入到保存数据的指定2D数组时会出现一些问题。在循环的一次运行期间(P'的第二行/右行),有两个字符插入到数组中:
有人有解决方案吗?
产生问题的部分代码(makeDots填充数组):
#include <stdio.h>
#define WIDTH 20
#define HEIGHT 10
void makeDots(char a[WIDTH][HEIGHT]) {
for (int x = 4; x < 7; x++) {
int y = x + 1;
//cartesian coordinate system - point of origin in bottom left corner
a[y][x] = 'P';
//a[i-1][WIDTH / 2 + i] = '+'; //try to remove misplaced P - leads to empty array
}
}
void clear(char a[WIDTH][HEIGHT]) {
for (int l = 0; l < HEIGHT; l++) {
for (int c = 0; c < WIDTH; c++) {
a[l][c] = '+';
}
}
}
void draw(char a[WIDTH][HEIGHT]) {
for (int l = HEIGHT - 1; l >= 0; l--) {
for (int c = 0; c < WIDTH; c++) {
putchar(a[l][c]);
}
printf("\n");
}
}
int main() {
char a[WIDTH][HEIGHT];
clear(a);
makeDots(a);
draw(a);
return 0;
}
答案 0 :(得分:1)
请参阅您的此代码:
void clear(char a[WIDTH][HEIGHT]) {
for (int l = 0; l < HEIGHT; l++) {
for (int c = 0; c < WIDTH; c++) {
a[l][c] = '+';
}
}
}
您正在使用[WIDTH] [HEIGHT]作为您的char数组,但是在for循环中,您正在使用相反的方法。看看吧。这可能是问题所在。
答案 1 :(得分:1)
您在函数x
中混合了y
和makeDots
,在函数l
和c
中混合了clear
和draw
访问数组。像这样调整你的代码:
#define WIDTH 20
#define HEIGHT 10
void makeDots(char a[WIDTH][HEIGHT]) {
for (int x = 4; x < 7; x++) {
int y = x + 1;
//cartesian coordinate system - point of origin in bottom left corner
a[x][y] = 'P';
// ^ ^
//a[WIDTH / 2 + i][i-1] = '+'; //try to remove misplaced P - leads to empty array
}
}
void clear(char a[WIDTH][HEIGHT]) {
for (int l = 0; l < HEIGHT; l++) {
for (int c = 0; c < WIDTH; c++) {
a[c][l] = '+';
// ^ ^
}
}
}
void draw(char a[WIDTH][HEIGHT]) {
for (int l = HEIGHT- 1; l >= 0; l--) {
for (int c = 0; c < WIDTH; c++) {
putchar(a[c][l]);
// ^ ^
}
printf("\n");
}
}
int main() {
char a[WIDTH][HEIGHT];
clear(a);
makeDots(a);
draw(a);
return 0;
}