以下代码中运行时错误的原因是什么?

时间:2017-05-25 11:04:28

标签: c string char strcmp

我试图解决在线法官的问题(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;
}

2 个答案:

答案 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]);
}