当前位置:编程学习 > C/C++ >>

C语言程序求改错

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
char i[3][10];
int  k[3][3],j,z;
printf("请按顺序输入 姓名   英语   语文   数学   平均分 用回车隔开");
for(z=0;z<=3;z++)
for(j=0;j<=3;j++)
{
if (j=0) scanf ("%s",&i[j][10]);
scanf("%d",&k[j][z]);
}
printf("姓名   英语   语文   数学   平均分");

for(z=0;z<=3;z++)
for(j=0;j<=3;j++)
{
if (j=0) scanf ("%s",i[j][10]);
printf("%8d",k[j][z]);
}
   
}

追问:你说的很好。。我是初学。。我回复中的关于else的。如果我加了else我要写一个空语句没必要。所以跳过了。  

“那么在这两个数组中,k[3][3]错误了,它的大小不够放下4个分数,要定义为k[3][4],这样就可以了。”
数组不都是以下标0开始的吗比如 i[2] 不就是i[0],i[1];这两个吗i[4]就是i[0]---i[3]四个这个我明白。。我是只要3组数据就足够。。。因为第一组是字符串。。scanf()写错之前我看出来了。我现在就是不能正确输出字符串。。求帮忙

#include "stdio.h"
void main()
{
char i[4][10];
int  k[3][3],j,z,x=0;
printf("请按顺序输入 姓名   英语   语文   数学   平均分 用回车隔开\n");
for(z=0;z<=3;z++)
for(j=0;j<3;j++)
{
if (j==0) scanf ("%s",i[j]);
scanf("%d",&k[j][z]);
}
printf("姓名   英语   语文   数学   平均分\n");

for(z=0;z<=3;z++)
for(j=0;j<3;j++)
{
if (j==0) printf ("%s",i[j]);
printf("%8d",k[j][z]);
x=k[j][z]+x;
if (j==2) {printf ("%8d\n",x/3);x=0;}

}
   
}
请帮帮忙给我说说我这程序为什么不能输出正确的字符串。。

答案:你是初学的吧?

在你的代码中犯的错误有:

1,没有考虑到数组大小;

2,对数组理解不够深刻

说说数组吧,你的数组错误:你的数组i[3][10]是想放名字吧,可以改成Name[3][10],这样也好理解,当然还有Score[3][3].不过你硬要用i和k,也可以。
那么在这两个数组中,k[3][3]错误了,它的大小不够放下4个分数,要定义为k[3][4],这样就可以了。
输入姓名时&i[j][10]要改成i[z],i[z]就是一个地址

看你的代码很乱,下面给一个在你代码上修改的代码:
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
char i[3][10];
int  k[3][4],j,z;                     //有改
printf("请按顺序输入 姓名   英语   语文   数学   平均分 用回车隔开");
for(z=0;z<3;z++)   //有改
for(j=0;j<=3;j++)
{
if (j==0) scanf ("%s",i[z]); //有改
scanf("%d",&k[z][j]);   //有改
}
printf("姓名   英语   语文   数学   平均分");

for(z=0;z<3;z++)   //有改
for(j=0;j<=3;j++)
{
if (j==0) printf ("%s",i[z]);  //有改
printf("%8d",k[z][j]);   //有改
}

}

 

下面给个我写的:
#include "stdio.h"
#include "stdlib.h"
void main()
{
char Name[3][10];
int  Score[3][4];
int i,j;
printf("请按顺序输入 姓名   英语   语文   数学   平均分 用回车隔开\n");
for(i=0;i<3;i++)
 for(j=0;j <= 3;j++)
 { 
  if (j==0)
   scanf ("%s",Name[i]);
   scanf("%d",&Score[i][j]);
 }
printf("姓名   英语   语文   数学   平均分\n");
for(i = 0;i < 3;i++)
{
 for(j = 0;j <= 3;j++)
 {
  if (j == 0)
   printf ("%s",Name[i]);
   printf("%8d",Score[i][j]);
 }
 printf("\n");
}
 system("pause");
}

 

我看你上面的回复,“

大哥你懂不????if没有括号只执行一个分号 第二个分号就是if之外的语句了 就相当于eles。。我只需要他成立的时候执行操作 不成立则不执行操作,后面的语句不管成不成立都执行何必要else。。。

我想说的是不相当于else!你加不加效果是不一样的。

要好好理解数组和字符串,它相当于(这个可以相当于)指针,因为数组的操作,系统还要转换成指针的操作。

说简单其实也不简单。。。

你说你不能输出的原因啊,第一,输出你写成了scanf(),第二存放的地址错误,怎么能放在一个char里面呢?要放在char*里面才对。

z j所在循环都从0到3 循环了四次  超了k数组
逻辑不正确,掉了else,改成这样就对了if(j=0)scanf(......);
else scanf(.....);
char i[3][10];
int  k[3][3],j,z;
printf("请按顺序输入 姓名   英语   语文   数学   平均分 用回车隔开");
for(z=0;z<3;z++)
for(j=0;j<3;j++)
{
if (j==0) scanf ("%s",&i[j][10]);
scanf("%d",&k[j][z]);
}
printf("姓名   英语   语文   数学   平均分");

for(z=0;z<3;z++)
for(j=0;j<3;j++)
{
if (j==0) scanf ("%s",i[j][10]);
printf("%8d",k[j][z]);
}
   

海外国家

上一个:c语言中程序循环
下一个:C语言程序的注意事项?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,