我试图解决在线法官的问题(https://www.codechef.com/problems/COOK82A)。以下是问题的代码。当我提交法官时给出了运行时错误。任何人都可以帮助我
#include <stdio.h>
int main(void)
{
int a,i,j,flag,pos,flag1,pos1;
char team[15];
int score[4];
scanf("%d",&a);
while(a--)
{
for(i=0;i<4;i++)
{
scanf("%s",&team[i]);
scanf("%d",&score[i]);
}
for(i=0;i<4;i++)
{
if(team[i]=="Barcelona")
pos=i;
if(team[i]=="Eibar")
flag=i;
if(team[i]=="RealMadrid")
pos1=i;
if(team[i]=="Malaga")
flag1=i;
}
if((score[pos]>score[flag]) && (score[flag1]>score[pos1]))
printf("Barcelona\n");
else
printf("RealMadrid\n");
}
return 0;
}
答案 0 :(得分:2)
在您的代码中
scanf("%s",&team[i]);
错误,您没有空间存储字符串。您可以将char
存储在&team[i]
指向的内存中,但不能存储空终止的char
数组。
换句话说,team
是一个char
的数组,而你似乎需要char
数组的数组,比如
#define NAMESIZ 32
#define TEAMSIZ 15
char team[TEAMSIZ][TEAMSIZ] = {0};
然后,正确使用team[i]
(煮沸到地址本身)可以提供帮助。
在此错误之后,还有一个必须修复的逻辑错误。您正在使用==
运算符来比较字符串,这是不可能的。您需要使用strcmp()
来比较字符串(即,以null结尾的char
数组的内容)。
答案 1 :(得分:0)
在您的代码中,
scanf("%s",&team[i]); is wrong.
你宣布一个团队[15]作为一个字符数组,但是存储了no。其中的字符串。 如果你想这样做,
scanf("%s",&team[i])
然后声明一个二维字符数组,如。
char arrayOfWords[NUMBER_OF_WORDS][MAX_SIZE_OF_WORD];
然后你需要以这种方式输入字符串: int i;
for (i=0; i<NUMBER_OF_WORDS; i++) {
scanf ("%s" , arrayOfWords[i]);
}
要打印或处理此数组,您需要执行以下操作:
for (i=0; i<NUMBER_OF_WORDS; i++) {
printf ("%s" , arrayOfWords[i]);
}