求助C大神
//注意二维数组的索引,a = *(*(p + i) + j),其中p指向a;#include"stdio.h"
double *research(double (*line), int n)
{
double *s;
s = *(line + n);//传给主函数为第n行首元素的地址score,如果是s = (line + n),传给主函数的是第n行的地址score;
return s;
}
int main ()
{
double score[] = {{78.6, 56.7, 89, 99}, {45.5, 67.6, 88, 78.6}, {58.6, 67.8, 77.6, 66}};
double *result;
int m, i;
printf("请输入m查询学生的学号(按#结束):\n\n");
while(1)
{
if(m == '#')
{
goto END;
}
scanf("%d", &m);
printf("The score of 190424090%d is :", m);
result = research(score, m);
for(i = 0; i < 4; i++)
{
printf("%.2lf\t", *(result + i));
}
printf("\n");
}
END:
printf("That's all!\n");
return 0;
}
为什么输入#不会调到END啊,换成break也不能结束循环 m是整形,‘#’是字符,懂? 本帖最后由 love_qj 于 2020-2-2 15:04 编辑
字符型没有ASC码吗???大哥 1、scanf("%d", &m); scanf中接收类型符已经限制为%d了,它不能接收字符型,我不能上图,自己可以调试下,输入字符型读值是无效的
2、程序逻辑错误.
scanf("%d", &m);
printf("The score of 190424090%d is :", m);
result = research(score, m);
for(i = 0; i < 4; i++)
{
printf("%.2lf\t", *(result + i));
}
printf("\n");这里,接收m输入后就直接向下执行,按你所说,即使输入#号有效,#号的ascii码是35,继续向下执行,在result里面,不就会导致数组越界?你定义的数组是3*4的
应该把scanf语句放在结束输入判读之前
scanf("%d", &m);
if(m == '#')
{
goto END;
}
页:
[1]