为什么这个代码我还没输入数据就出结果了


#include<stdio.h>
#include<stdlib.h>
int main()
{int *p=NULL,n,m,i,j,max=0,maxclass,maxstudent;
printf("Input array size m,n:");
scanf("%d,%d",&m,&n);
p=(int*)calloc(m*n,sizeof(int));
for(i=0;i<m;i++)
{printf("输入第%d班的成绩\n",i+1);
for(j=0;j<n;j++)
{scanf("%d",&p[i*n+j]);
}
}
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
{if(p[i*n+j]>max)
{max=p[i*n+j];
maxclass=i+1;
maxstudent=j+1;
}
}
}
printf("%d班%d号最高:%d",maxclass,maxstudent,max);
}

scanf中间不要加,不然你这里n没有写入值,相当于n没有被初始化

scanf("%d,%d",&m,&n);
改成
scanf("%d%d",&m,&n);

【以下回答由 GPT 生成】

这个问题的原因是代码中没有合适的提示用户输入数据的语句,所以在运行程序时会直接执行后续的计算和输出操作。解决方案是在需要输入数据的位置添加适当的提示语句,以确保在输入数据之前打印提示并等待用户输入。以下是修改后的代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int *p = NULL, n, m, i, j, max = 0, maxclass, maxstudent;
    printf("请输入数组的大小 m, n:");
    scanf("%d,%d", &m, &n);
    p = (int *)calloc(m * n, sizeof(int));
    for (i = 0; i < m; i++)
    {
        printf("请输入第%d班的成绩\n", i + 1);
        for (j = 0; j < n; j++)
        {
            printf("请输入第%d班第%d个学生的成绩:", i + 1, j + 1);
            scanf("%d", &p[i * n + j]);
        }
    }
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (p[i * n + j] > max)
            {
                max = p[i * n + j];
                maxclass = i + 1;
                maxstudent = j + 1;
            }
        }
    }
    printf("%d班%d号最高:%d\n", maxclass, maxstudent, max);
}

现在,当你运行该代码时,它会在每次需要输入数据时都给出相应的提示,并等待你输入数据后再进行后续的计算和输出操作。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

第7行:scanf("%d,%d",&m,&n); 输入语句里,两个数值间以 ',' 英文半角逗号间隔,所以输入时如:3,5