love_qj 发表于 2020-2-2 13:45:43

求助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也不能结束循环

2技能封走位 发表于 2020-2-2 13:56:59

m是整形,‘#’是字符,懂?

love_qj 发表于 2020-2-2 14:13:11

本帖最后由 love_qj 于 2020-2-2 15:04 编辑

字符型没有ASC码吗???大哥

二月的鸟 发表于 2020-2-2 16:58:01

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]
查看完整版本: 求助C大神