2017-05-25 184 views
-4

我试图解决一个在线裁判问题(https://www.codechef.com/problems/COOK82A)。以下是该问题。当我提交法官给予运行时代码error.Can人帮助我以下代码中运行时错误的原因是什么

#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; 
} 
+1

欢迎堆栈溢出。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –

+2

请在此处不要询问关于在线代码判断引擎的问题。任何人都不可能告诉你自己的测试用例失败,因为这些通常都没有披露。即使您测试的是在您的本地环境中运行,您可能错过了测试在线挑战中应用的一些边缘案例。有创意并尝试找到它们。此外,长期来看,这些问题可能没有任何价值,除了欺骗在线竞赛之外,没有任何东西可以学到。 –

+1

'team [i]'是一个'char'。 ''巴塞罗那''是一个char *'。 – Barmar

回答

2

在你的代码

scanf("%s",&team[i]); 

是错误的,你没有足够的空间来存储字符串。您可以将char存储在&team[i]指向的内存中,但不能存储以空值终止的char阵列。

为了把它在其他的方式,你teamchar秒的阵列,而你似乎需要char数组的数组,像

#define NAMESIZ 32 
#define TEAMSIZ 15 

char team[TEAMSIZ][TEAMSIZ] = {0}; 

,然后,适当地使用team[i](煮到一个地址本身)可以帮助。


发生此错误后,还有一个逻辑错误必须修复。您正在使用==运算符来比较字符串,这是不可能的。您需要使用strcmp()来比较字符串(即,以null结尾的char阵列的内容)。

+0

谢谢你会尽力纠正错误 – satsopho

0

在你的代码,

scanf("%s",&team[i]); is wrong. 

你宣布一个团队[15]作为一个字符数组,但存储没有。在它的字符串。 如果你想这样做,

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]); 
} 
+0

感谢您的答案我会执行它 – satsopho

相关问题