带c中的字符的数组

时间:2014-11-04 18:04:27

标签: c

我是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");
  }
}

3 个答案:

答案 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");

}     }