高分求C语言高手解答,保龄球程序不知道哪里出错了..

2024-12-28 20:08:15
推荐回答(3个)
回答1:

你错误的现象是什么?
逻辑太复杂了没有细看,我发现你定义b[10][10]={0};
但是后面用到了a[i][11]=b[i][10];
b[i][10]已经数组越界了,产生的结果未知了,你看看是不是这里的问题。

而且这句a[i][11]=b[i][10];是不需要的吧。
又发现一个问题,你算分的时候只判断了一次全倒和两次击倒的情况,对于两次未全倒的情况没有处理。代码我帮你改好了。你可以试试看。

#include

#define MAX_LUN 3 //这里设置最大轮数
#define MAX_REN 2 //这里设置参与人数

int fen(int* p,int* q);
int main(void)
{
int a[MAX_REN][MAX_LUN+2];
int b[MAX_REN][MAX_LUN];
int i,j,s[MAX_REN],k,index,temp;
FILE *fp=NULL;

memset( a, 0, sizeof(a) );
memset( b, 0, sizeof(b) );

for(j=0;j {
printf("第%d轮开始\n",j+1);
for(i=0;i {
printf("第%d号选手第一次击球击倒数:",i+1);
scanf("%d",&a[i][j]);
if(a[i][j]<10)
{
printf("\n第%d号选手第二次击球击倒数:",i+1);
scanf("%d",&b[i][j]);
}
}
}
for(i=0;i {
if(a[i][MAX_LUN - 1]==10)
{
printf("\n第%d号选手最后一轮一次全击倒,奖励两次击球,请分别输入击倒数:",i+1);
scanf("%d%d",&a[i][MAX_LUN],&a[i][MAX_LUN+1]);
}
else if(a[i][MAX_LUN-1]+b[i][MAX_LUN-1]==10)
{
printf("\n第%d号选最后一轮两次全击倒,奖励一次击球,请输入击倒数:",i+1);
scanf("%d",&a[i][MAX_LUN]);
}
}

for(i=0;i {
s[i]=fen(a[i],b[i]);
printf("\n第%d号选手总分为:%d",i+1,s[i]);
}
for(k=0;k<9;k++)
{
index=k;
for(i=k+1;i<10;i++)
if(s[i]>s[index])
index=i;
temp=s[index];
s[index]=s[k];
s[k]=temp;
}

if((fp=fopen("f1.txt","w"))==NULL)
{
printf("File open error!\n");
exit(0);
}

for(i=0;i fprintf(fp,"%d ",s[i]);

if(fclose(fp)){
printf("Can not close the file!\n");
exit(0);
}

return 0;
}

分给我喽!!

回答2:

—_—|||,你代码写些注释行吗,让我们更好地看懂你的代码思路~

回答3:

a[i][11]=b[i][10]; b数组越界了吧b数组下标是0-9吧。还有这一句逻辑上什么作用,用上一次b[i][9]输入的值?是不是应该改成a[i][10]=b[i][9];?