【问题标题】:what is the cause of runtime error in the following code以下代码中运行时错误的原因是什么
【发布时间】:2017-05-25 11:04:28
【问题描述】:

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

【问题讨论】:

  • 欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
  • 请不要在此处询问有关在线代码判断引擎的问题。任何人都不太可能从他们的测试用例中告诉你你失败的地方,因为这些通常不会被披露。即使您测试的是在本地环境中运行,您也可能错过了测试在线挑战中应用的一些边缘案例。要有创意并尝试找到它们。此外,从长远来看,这些问题可能没有任何价值,除了在在线比赛中作弊,什么都学不到。
  • team[i]char"Barcelona"char*
  • 您似乎对字符串和字符之间的区别有很多误解。
  • 原因是调试失败。

标签: c string char strcmp


【解决方案1】:

在你的代码中

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

错了,你没有空间来存储字符串。您可以将char 存储在&amp;team[i] 指向的内存中,但不能存储以null 结尾的char 数组。

换句话说,您的teamchars 的数组,而您似乎需要char 数组的数组,类似于

#define NAMESIZ 32
#define TEAMSIZ 15

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

然后,正确使用team[i](归结为地址本身)会有所帮助。


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

【讨论】:

    【解决方案2】:

    在您的代码中,

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

    您将 team[15] 声明为字符数组,但正在存储编号。里面的字符串。 如果你想这样做,

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

    然后像这样声明一个二维字符数组。

    char arrayOfWords[NUMBER_OF_WORDS][MAX_SIZE_OF_WORD];
    

    那么你需要这样输入字符串: 诠释我;

    for (i=0; i<NUMBER_OF_WORDS; i++) {
        scanf ("%s" , arrayOfWords[i]);
    }
    

    要打印或处理这个数组,你需要做:

    for (i=0; i<NUMBER_OF_WORDS; i++) {
        printf ("%s" , arrayOfWords[i]);
    }
    

    【讨论】:

    • 感谢您的回答,我将实施它
    猜你喜欢
    • 2019-05-05
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多