以下代码中运行时错误的原因是什么
我试图解决一个在线裁判问题(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;
}
在你的代码
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
阵列的内容)。
谢谢你会尽力纠正错误 – satsopho
在你的代码,
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]);
}
感谢您的答案我会执行它 – satsopho
欢迎堆栈溢出。请花些时间阅读[The Tour](http://*.com/tour),并参阅[帮助中心](http://*.com/help/asking)中的资料,了解您可以在这里问。 –
请在此处不要询问关于在线代码判断引擎的问题。任何人都不可能告诉你自己的测试用例失败,因为这些通常都没有披露。即使您测试的是在您的本地环境中运行,您可能错过了测试在线挑战中应用的一些边缘案例。有创意并尝试找到它们。此外,长期来看,这些问题可能没有任何价值,除了欺骗在线竞赛之外,没有任何东西可以学到。 –
'team [i]'是一个'char'。 ''巴塞罗那''是一个char *'。 – Barmar