Scanf将错误类型的变量寻址到数组

Scanf将错误类型的变量寻址到数组,c,scanf,C,Scanf,例如,第一个输入是B2A0按Enter键。team1[0]=“B”,其余部分为True。到目前为止没有问题。 但在第二次输入中,这种情况会发生。。假设这是我的第二次输入>>A1 B 1 团队1[1]不是“A”。正如你所猜测的,score1[1]和score2[1]也不是1,这就是我问的原因 // the first versions of the arrays // 0x7fffffffea60 "p\353\377\377\377\177" team1[size] // 0x7ffff

例如,第一个输入是B2A0按Enter键。team1[0]=“B”,其余部分为True。到目前为止没有问题。 但在第二次输入中,这种情况会发生。。假设这是我的第二次输入>>A1 B 1 团队1[1]不是“A”。正如你所猜测的,score1[1]和score2[1]也不是1,这就是我问的原因

// the first versions of the arrays 
// 0x7fffffffea60 "p\353\377\377\377\177"    team1[size]
// 0x7fffffffea50 "\240\353\377\377\377\177" team2[size]

// after 1st input ( assume "B 2 A 0" )
// 0x7fffffffea60 "B\353\377\377\377\177"    team1[size]
// 0x7fffffffea50 "A\353\377\377\377\177"    team2[size]

// after 2nd input ( assume "A 1 B 1" )
// 0x7fffffffea60 "B\n\377\377\377\177"      team1[size]
// 0x7fffffffea50 "A\353\377\377\377\177"    team2[size]

char team1[size];
char team2[size];
int score1[size];
int score2[size];

for(i=0;i<size;i=i+1)
{
    scanf("%c %d %c %d",&team[i],&score1[i],&team2[i],&score2[i]);
}

汇编和执行:

pi@raspberrypi:/tmp $ ./a.out
B 2 A 0
A 1 B 1

   C 22     D13
input values:
B 2 A 0
A 1 B 1
C 22 D 13

我使用不可见控件+d来完成输入

为什么不检查scanf的返回值以查看有多少项被成功读取(如果有的话)?@xing omg它工作了thx先生,但为什么?我不明白?
#include <stdio.h>

#define size 100

int main()
{
  char team1[size];
  char team2[size];
  int score1[size];
  int score2[size];
  int i, j;

  for(i=0; i < size; ++i)
  {
    if (scanf(" %c %d %c %d", &team1[i], &score1[i], &team2[i], &score2[i]) != 4)
      break;
  }

  /* check */
  puts("input values:");

  for(j=0; j<i ; ++j)
  {
    printf("%c %d %c %d\n", team1[j], score1[j], team2[j], score2[j]);
  }
}
pi@raspberrypi:/tmp $ ./a.out
B 2 A 0
A 1 B 1

   C 22     D13
input values:
B 2 A 0
A 1 B 1
C 22 D 13