我需要从stdin中获取一个二维数组(Grid),对字符进行一些操作并打印一个包含更改的新网格。
我的策略是使用网格网格[LINES] [COLUMNS]创建一个Struc,然后使用getChar()使用指针将每个char推入网格。当我在函数中打印但它无法从外部访问值时,它工作得很好。我只是得到可能代表记忆地址或其他东西的怪异角色。
这是程序的简化代码块。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
struct Grid{
char box[20][40];
};
int main(int argc, char *argv[]) {
struct Grid grid;
readInitGrid(&grid);
displayGrid(&grid);
}
void readInitGrid(struct Grid *grid) {
char c;
for (unsigned int i = 0; i < 20; i++) {
for (unsigned int j = 0; j < 40 + 1; j++) { //+1 is for the /n at the end of each line
while ((c = getchar()) != EOF) {
grid->box[i][j] = c;
printf("%c", grid->box[i][j]); //Will print correcly
}
}
}
}
void displayGrid(const struct Grid *grid) {
for (unsigned int i = 0; i < 20; ++i) {
for (unsigned int j = 0; j < 40; ++j) {
printf("%c", grid.box[i][j]); //This do not work
}
}
printf("\n");
}
Result - See both print block bellow First block show perfectly but second is messed-up
我在实际程序中将其他内容传递给此结构,并且我没有任何issu来访问int和char的信息。我唯一遇到的问题是2d阵列。另一件事,我不能使用maloc。
答案 0 :(得分:1)
将while更改为if,以便我的for循环影响grid-&gt; box [i] [j] = c;
void readInitGrid(struct Grid *grid) {
char c;
for (unsigned int i = 0; i < 20; i++) {
for (unsigned int j = 0; j < 40 + 1; j++) {
if ((c = getchar()) != EOF) {
grid->box[i][j] = c;
printf("%c", grid->box[i][j]);
}
}
}
}