我想清楚,是的这是一个与家庭作业相关的问题,不,我不指望你为我做功课。我喜欢编码,我只是在寻求建议。
话虽如此,我在C中创造了生命游戏。这里有一些代码表明我一直在努力:
void create_area(void){
int table[24][80];
int i,j;
int xvalue=10,yvalue=10;
table[10][10] = 2;
/*for(j=0; j<24; j++){
for(i=0; i<80; i++){
table[j][i] = 1;
}
}*/
for(j=0; j<24; j++){
for(i=0; i<80; i++){
printf(" ",table[j][i]);
}
printf("\n");
}
/*if(xvalue=10){
if(yvalue=10){
printf("O", table[xvalue][yvalue]);
}
}*/
/*for(j=0; j<24; j++){
for(i=0; i<80; i++){
if(xvalue=0){
if(yvalue=0){
printf("O",table[xvalue][yvalue]);
}
}
}
}*/
}
我的主要方法没有在这里显示,但是它负责查找参数和参数字符串的数量,并将它们放入我使用的两个数组(x_array和y_array)的坐标中。上面显示的方法基本上是在终端中创建网格。 create_area的参数现在是无效的(因为我只想测试值以查看它是否有效,这就是为什么我有两个int变量:xvalue和yvalue)。但想法是create_area将采用x值和y值并初始化单元格将开始的字符“O”。很多代码都被注释掉了,因为我正在努力解决问题。
我的问题:如何在我的二维数组中插入一个字符,以便在终端中查看时在网格上的某个位置显示该字符?
到目前为止,我创建了我的2d数组,并使用了两个for循环来遍历它并打印空格。但我正试图弄清楚如何在表[10] [10]中打印一个字符。我尝试了一些东西,但角色不会显示在特定位置,只显示在屏幕的左下角。我想我错过了一些简单的事情。
任何帮助都将不胜感激。
答案 0 :(得分:4)
如果要表示字符网格,则应使用数据类型char
而不是int
和字符常量(例如'1'
)而不是整数常量(例如{{ 1}})。但是,主要问题是语句1
总是打印一个空格,因为您错过了格式字符串中的格式说明符(例如,printf(" ",table[j][i]);
表示整数,或"%d"
表示字符数据类型)。
我不知道你的网格究竟是什么样子,但是下面的片段可能会有所帮助:
"%c"
答案 1 :(得分:4)
我同意这里的其他答案,但让我提供另一个观点。
您应该将数据与演示文稿分开。这里的数组是你的数据(也可能是bool table[24][80]
,因为在生命游戏中,每个单元格由1位描述)。显示数据的代码应检查每个数据元素(查看它是0还是1)和输出1 char
。为此,您可以使用putchar
:
putchar(table[j][i] ? 'x' : ' ')
或printf
:
printf("%c", table[j][i] ? 'x' : ' ')
将数据与演示文稿分开是很好的,因为这样可以更轻松地分别更改(改进)每个数据。例如,如果您决定在可视化中将x
替换为*
,则相应的代码位于一个位置。如果您决定通过为每个单元分配1个字节来优化存储(而不是每个单元1 int
) - 更改也相对本地化。
答案 2 :(得分:2)
供选择。您实际上可以用空格填充table
,修改它然后打印
char table[24][80]; // char is better
memset(table, ' ', sizeof(table[0][0]) * 24 * 80); // Fill table with spaces
table[10][10] = 'J'; // Your first custom char
table[20][20] = '0'; // Another custom char
for(j=0; j<24; ++j) {
for(i=0; i<80; ++i) {
printf("%c",table[j][i]); // You forget write "%c" to print char
//putchar(table[j][i]) // This will also work
}
printf("\n");
}
答案 3 :(得分:1)
请参阅printf的此说明。在C中,char
acter只是一个整数,所以你应该指定一个格式来输出它,就像一个字符%c
或整数(十进制)%d
。
for(j=0; j<24; j++) {
for(i=0; i<80; i++){
if (table[j][i] == 1) { // it's a code of some character that fills your array (As I saw in commented block you used 1)
printf(" ");
} else {
printf("%c",table[j][i]);
}
}
printf("\n");
}
P.S。对于profi,我知道这不是最佳代码,但他很容易理解。
答案 4 :(得分:1)
您可以使用%hhu
扫描代码打印unsigned char
。这意味着无需更改int table
数据类型。
printf("%hhu", table[j][i]); % table[j][i] contains integers
提示:unsigned char
范围为0 - 255
,未放置在此范围内的数字将不会显示为您所期望的范围。