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语言程序的注意事项?