我是C的新手,只是想尝试一些有趣的编程!我的第一个想法是创造一个Tic-Tac-Toe游戏。在下面的代码中,我正在尝试生成一个字段。它在某种程度上起作用,但是当我测试它时,条目feld[1][0]
和feld[2][0]
是空的。另外我不明白的是,如果我在一个条目中保存了多个字母,例如xx,它就会出现在其他地方。我猜这是C的保存空间分配的问题。很高兴任何反馈!
#include <stdio.h>
main()
{
int i,j;
char feld[3][3];
for(j=0; j<3; j++)
{
for(i=0; i<3; i++)
{
printf("\t %2i. column %2i. row: ", i+1, j+1);
scanf("%s", &feld[i][j]);
}
}
for(j=0; j<3; j++)
{
for(i=0; i<3; i++)
{
printf("\t %c", feld[i][j]);
}
printf("\n");
}
}
答案 0 :(得分:2)
这一行:
scanf("%s", &feld[i][j]);
您正在读取一个字符串(多个字符)并将它们放在只应该是一个字符的位置。 这会对附近存储的字符造成损害。 使用类似的东西:
scanf("%c", &feld[i][j]);
每次只读一个字符。 但是这个解决方案也不是很完美,因为现在如果你输入太多字符,它们将一直存储,直到你再次尝试读取它们,这会导致一些奇怪的行为,比如打印多次而不等待你的输入:
2. column 1. row: 3. column 1. row: 1. column 2. row:
正确答案取决于您一次输入多个输入时想要发生的事情。
答案 1 :(得分:1)
以下是工作代码。数组中的每个元素都是一个字符。 %s
用于扫描字符串而不是字符。您需要使用%c
。在%c
之前为scanf添加空间以获取吃/狼吞虎咽的空格和特殊字符。(如输入)
#include <stdio.h>
main()
{
int i,j;
char feld[3][3];
for(j=0; j<3; j++)
{
for(i=0; i<3; i++)
{
printf("\t %2i. Row %2i. Column:\n ", j+1, i+1);
scanf(" %c", &feld[j][i]);
}
}
for(j=0; j<3; j++)
{
for(i=0; i<3; i++)
{
printf("\t%c", feld[j][i]);
}
printf("\n");
}
}
答案 2 :(得分:0)
首先在你的代码'j'代表行所以它应该是第一个,我应该像feld [j] [i] 第二个字符大小是1所以我们只能存储单个字符,这就是为什么它使用多个输入时出现问题。
#include <stdio.h>
main()
{
int i,j;
char feld[3][3];
for(j=0; j<3; j++)
{
for(i=0; i<3; i++)
{
printf("\t %2i. column %2i. row: ", i+1, j+1);
scanf("%c", &feld[j][i]);
}
}
for(j=0; j<3; j++)
{
for(i=0; i<3; i++)
{
printf("\t %c", feld[i][j]);
}
printf("\n");
} }