所以我一开始确实在 main.c 中编写了所有函数。 但它占用了太多空间,所以我尝试为我的代码制作头文件和源文件。
但是问题来了,当我将表[x][y]从主文件发送到其他文件中的函数时,表的数据就像转换一样,它改变了表的值,使得无法使用。
我最初存储数字字符,如下所示:“0”或“1”或“2”...
当我在两个函数(主函数和另一个文件中的函数)中使用 printf("%c", level[x][y]);
打印值时,它首先在main 并且它在第二个函数中无法正常工作。
它打印完全改变的空格或其他字符。
我也尝试过 printf("%d", level[x][y]);
但效果不佳。结果不同,在第一个函数中它显示了字符“代码”,在第二个函数中它显示了内存地址,但我不确定。
读取的原始文件是这样的(但是有100行和100列):
000000000000000
000000000100000
000000000000000
#include <stdio.h>
#include <stdlib.h>
#define tx 100
#define ty 100
#include "function.h"
void fill_level(char *file, int level[tx][ty]){
FILE *fichier=NULL;
fichier = fopen(file, "r");
int x, y;
char buff = '0';
if(fichier == NULL) printf("Erreur de lecture du fichier de niveau");
else {
for(y = 0;y < ty; y++){
for(x = 0;x < tx; x++) {
buff = fgetc(fichier);
level[x][ty-y] = buff;
}
}
}
fclose(fichier);
}
int main() {
int level_1[tx][ty]={{0}};
fill_level("Level 1.txt", level_1);
int i, j;
for(i = 0;i < ty;i++){
for(j = 0;j < tx;j++){
printf("%c", level_1[j][i]);
}
printf("\n");
}
//then I call the function from the second file
summon_entity_level(level_1);
}
第二个函数参数是:
void summon_entity_level(int levelEnt[tx][ty]);
第二个函数是:
#define tx 100
#define ty 100
void summon_entity_level( int levelEnt[tx][ty]){
int i, j;
for(i = 0;i < ty;i++){
for(j = 0;j < tx;j++){
printf("%c", levelEnt[j][i]);
}
printf("\n");
}
}
我期望像这样的东西(主要工作):
000000000000000
000000000100000
000000000000000
但是我得到了这样的东西(在另一个文件的第二个函数中):
`dyüm áP░ ┴ C ð 0î
CIIC ,aß@H I
最佳答案
好吧,我在问题中发布的代码实际上正在工作,实际上我正在编写具有更多上下文的其他代码,并且上下文干扰了我展示的代码。我终于成功了,感谢您的回答。 这是我正在做的事情,它是使用 SDL 2 的 Mario 复制品,这就是我将我的表称为关卡的原因,它是为了存储关卡。 screenshot
关于c - 将数据发送到 C 中的函数时数据表的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55951164/