例如,第一个输入是“ B 2 A 0 ”,请按Enter。 team1 [0] ='B',其余部分都为True。到目前为止没有问题。 但是在第二次输入中会发生..假设这是我的第二次输入>>“ A 1 B 1 ” team1 [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]);
}
答案 0 :(得分:1)
使用
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]); }
正如你所说
第一个输入是“ B 2 A 0”,按Enter键。
第一个 scanf 不会读取 enter ,并且仍然可用,因此第二个循环中,第一个%c
会得到它,然后 scanf < / em>有关第一个%d
的信息,请参见 A ,然后返回而无需设置score1[1]
team2[1]
和score2[1]
如前所述,您可以使用" %c %d %c %d"
,它会在输入的开头绕过空格和换行符。
请注意,您已经使用了绕过在%d
和%c
之间放置空格的方法,以便按预期方式读取N 2 A 0
在备注中还说过,当输入正常时,检查 scanf 的结果为4
#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
(我使用了不可见的控件 + d 完成输入)