求大神帮忙看下问题在哪

qq_41990653 2018-04-13 08:07:21
大一新萌实验周要编程序,求大神们看看出错在哪
...全文
1434 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-04-23
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
qq_36260408 2018-04-22
  • 打赏
  • 举报
回复
%s对应的不是字符串指针
MonGo17 2018-04-22
  • 打赏
  • 举报
回复
1.结构体中定义学号为整型,但输入时却是字符串类型的 2.计算平均分总和时stu[i].avg=stu[i].sum/4应放在第二个循环的外面,否则计算的是没门科目的四分之一 3.按总分从高到低排序时,stu[i+1].sum下标越界了,超过最大的6了,而且排序的方法也不对,可以用选择排序或冒泡排序。
zhouqunhai 2018-04-13
  • 打赏
  • 举报
回复
最后一个函数调用stu[i+1]越界了
自信男孩 2018-04-13
  • 打赏
  • 举报
回复
问题1:number是int类型,但是输入的格式是按照%s输入的:scanf("%s", &stu[i].number); 问题2:fun0中有逻辑错误,即stu[i].avg = stu[i].sum / 4;应该放在第二层循环外。 问题3:fun1中,出现越界问题(这个是导致程序异常退出的直接原因),i+1已经在i=5时,越界。 因此应改成:
for (i = 0; i < 6 - 1; i++
另外,排序还存在逻辑错误。排序是需要2层循环的,建议查一下冒泡排序算法。
FoolCarpe 2018-04-13
  • 打赏
  • 举报
回复
fun1中 循环中i = 5时,stu[i+1]越界访问了
赵4老师 2018-04-13
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧