为了账号安全,请及时绑定邮箱和手机立即绑定

为什么值会莫名地改变?

为什么值会莫名地改变?

C C++
AIxer 2016-02-07 23:26:57
感谢各位的注意!编译时没任何问题,只是在运行时问题很多;学生数不能多,用了12就出错;不知是什么情况?……………………各种问题;愿意的可以试一试!这是源文件:/*计算任意多个班级的平均分*/  #include <stdio.h> int main() {     int stu_num = 0;  //Declare the student's number and initiate it      int class_num =0;          //store the classes's number     int count = 0;             //for index     double grades[stu_num];   //Store students's grades     double aver[class_num];    //Store every class's average     double temp_sum = 0;          //Store every class's sum     double temp_average = 0;            //获取班级数      printf("你们有几个班呀?:");     scanf("%d",&class_num);     for(int i = 1;i<=class_num;++i)     {         count = 0;         printf("请输入第%d个班级的学生个数:",i);         scanf("%d",&stu_num);         printf("请输入每个学生的成绩:\n");             //Get every student's grade          for(int j = 0;j < stu_num;++j)         {             printf("%d>> ",j+1);             scanf("%lf",&grades[count]);             ++count;         }                   //Calculate the average and store it          temp_sum = 0;         for(int k = 0;k < stu_num;++k)             temp_sum += grades[k];         temp_average = temp_sum/(double)stu_num;           //类型转换!                   aver[i-1] = temp_average;     }              for(int d = 0;d < class_num;++d)     {         printf("第 %d 个班级的平均分为: %lf\n",d,aver[d]);     }         return 0; }
查看完整描述

5 回答

已采纳
?
MadMarical

TA贡献79条经验 获得超122个赞

你好。你的代码意思是动态的生成一个数组,比如输入classnum然后将这个classnum传入进数组。让数组也变成classnum这么大的。但是你建立数组的方式却是静态的,你已经初始化了一个classnum=0的数组,这个数组就是长度为0的数组。它不会因为你输入了一个classnum而变成长度为classnum大小的数组。如果要建立一个变长的数组,你需要在堆中开辟空间,在C中使用malloc 关键字,在C++使用new关键字。

查看完整回答
1 反对 回复 2016-02-08
?
醉梦尘缘

TA贡献1条经验 获得超0个赞

定义数组大小不能用变量

查看完整回答
反对 回复 2016-02-09
?
尼斯達Nesta_0

TA贡献3条经验 获得超0个赞

可变长数组是不能改变容量的,一开始已经stu_num=0和class_num=0,则两个double的数组大小都被定义成0个字节,因此后面for循环的访问属于越界访问。当两个数组越界位置如果没有数据存储则没有问题,如果本来已经有其余栈区数据占据这些内存,则会引发各种问题,而且每次运行出现的问题都有可能不同,结果都有可能每次都不同

查看完整回答
反对 回复 2016-02-09
?
尼斯達Nesta_0

TA贡献3条经验 获得超0个赞

可变长数组是不能改变容量的,一开始已经stu_num=0和class_num=0,则两个double的数组大小都被定义成0个字节,因此后面for循环的访问属于越界访问。当两个数组越界位置如果没有数据存储则没有问题,如果本来已经有其余栈区数据占据这些内存,则会引发各种问题,而且每次运行出现的问题都有可能不同,结果都有可能每次都不同

查看完整回答
反对 回复 2016-02-09
?
AIxer

TA贡献22条经验 获得超13个赞

怎么回事?

查看完整回答
反对 回复 2016-02-08
  • onemoo
    onemoo
    新版的问答系统真不好用,刚看到你的问题。 你现在明白了吗?
  • 5 回答
  • 0 关注
  • 2075 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号