以下代码是为“武器游戏(NOV19B-SC31)”编写的。 经过多次尝试,我观察到的问题是代码中的“战斗”功能能够读取但不能更改字符串中的各个字符。
从以下代码中, “ res”值相对于代码中提供的条件没有变化。初始化值,即0000000000,在整个代码中都保持不变。这样每次的答案都是0。
'''
#define Forn(i,N) for(i = 0;i<N;i++)
void battle(char *s1[11],char *s2[11])
{
int i;
Forn(i,10)
{
if(s1[i]=='1' && s2[i]=='1'){
s1[i]='0';
s2[i]='0';
}
else if(s1[i]=='1' || s2[i]=='1'){
s1[i]='0';
s2[i]='1';
}
printf("%s %s\n",s1,s2);
}
}
int main(void)
{
int t,count=0;
long long int n,i;
scanf("%d",&t);
while(t>0)
{
scanf("%lld",&n);
char s[n][11],res[11]="0000000000";
Forn(i,n)
scanf("%s",s[i]);
Forn(i,n)
battle(s[i],res);
Forn(i,11)
{
if(res[i]=='1')
count++;
}
printf("%d\n",count);
t--;
}
return 0;
}
'''
示例输入: 1个 3 1110001101 1010101011 0000000011
示例输出: 4
说明: 示例情况1:如果第一人称击败第二人,则武器1、3、7和10被销毁。然后,如果第三人击败第一人(现在拥有武器2、5、8和9),则武器9被销毁,获胜者拥有武器2、5、8和10的武器,则意味着还有4件武器。
答案 0 :(得分:0)
您将array of pointer
作为battle
函数的参数
void battle(char *s1[11],char *s2[11])
但是您需要array of characters
。
void battle(char s1[11],char s2[11])
如果启用了警告,
warning.c: In function ‘battle’:
warning.c:10: warning: comparison between pointer and integer
warning.c:10: warning: comparison between pointer and integer
warning.c:11: warning: assignment makes pointer from integer without a cast
warning.c:12: warning: assignment makes pointer from integer without a cast
warning.c:14: warning: comparison between pointer and integer
warning.c:14: warning: comparison between pointer and integer
warning.c:15: warning: assignment makes pointer from integer without a cast
warning.c:16: warning: assignment makes pointer from integer without a cast
warning.c:18: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char **’
warning.c:18: warning: format ‘%s’ expects type ‘char *’, but argument 3 has type ‘char **’
warning.c: In function ‘main’:
warning.c:34: warning: passing argument 1 of ‘battle’ from incompatible pointer type
warning.c:5: note: expected ‘char **’ but argument is of type ‘char *’
warning.c:34: warning: passing argument 2 of ‘battle’ from incompatible pointer type
warning.c:5: note: expected ‘char **’ but argument is of type ‘char *’