求助:Runtime Error:Segmentation fault,但是没有发现大佬说的数组开得太小或者指针异常的问题。

ggboy1999 2021-01-01 08:48:17
一个学校的题目,学校判题系统报错:Runtime Error:Segmentation fault,但是没有发现大佬说的数组开得太小或者指针异常的问题。
——————————————————————以下是题目———————————————————————————
题目描述
输入多个学生的学号、姓名和成绩,然后输出成绩最高的哪个学生的姓名和学号
输入描述
输入包含多组样例。
每组样例包含一个整数N,代表有N个学生。

接下来N行依次输入每个学生的学号、姓名和成绩。
若N = 0,则表示输入结束,这个样例不需要被处理。

输出描述
对于每组用例,你应当输出这组样例N个学生中成绩最高的学生的姓名和学号,每个输出占一行。
提示

样例输入复制样例输入数据
​2
1000 mingming 89

1001 lingling 90

3

1090 huanghuang 88

1076 zhouzhou 76

1003 xiaohong 87

0
样例输出
1001 lingling
1090 huanghuang
允许最长运行时间
3000ms
允许使用最大内存
1025MB
———————————————————以上是题目——————————————————————————
————————————————————我的代码:——————————————————————————
#include<stdio.h>
struct student
{
int number;
char name[100];
int score;
//int len;
};
void mystructioncontempt(struct student x[],int len)
{
int i=0;
//printf("len=%d\n",len);
struct student max=x[0];
for(;;)
{//printf("记号2\n");
if(max.score<=x[i].score)max=x[i];
//printf("%d %s",max.number,max.name);
i++;
//printf("i= %d len=%d\n",i,len);
if(i==len)
{
printf("%d %s\n",max.number,max.name);
break;
}
}
}
int main()
{
struct student s[100][100];
int len[100];
int i,j,n;
int flag=0;
for(i=0;;i++)
{
scanf("%d",&n);
if(n==0)break;
else
{//printf("记号3\n");
len[i]=n;
// printf("len[%d]=%d\n",i,n);
flag++;
for(j=0;j<n;j++)
{
// s[i][j].len=n;
scanf("%d %s %d",&s[i][j].number,s[i][j].name,&s[i][j].score);
//printf("记号2\n");
}
}
}
i=0;
for(;;)
{
mystructioncontempt(s[i],len[i]);
i++;
if(i==flag)break;
}
}
————————————————————————————————————————————————————————
测试软件 devc++5.11 编译通过功能没发现问题,实在不知道问题在哪里求助大佬
...全文
320 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggboy1999 2021-01-04
  • 打赏
  • 举报
回复
各位好兄弟等我考完试回来结帖哈
qzjhjxj 2021-01-02
  • 打赏
  • 举报
回复 1
供参考:
#include<stdio.h>

struct student
{
    int number;
   char name[20];
    int score;
     //int len;
};

int main(int argc, char* argv[])
{
    struct student s[100][100];
    int i,j,k=0,n,max[100]={0};

    while(1)
      {
        scanf("%d",&n);
        if(n==0) break;
        else
           {
              max[k]=0;i=0;
              for(j=0;j<n;j++)
                 {
                    scanf("%d %s %d",&s[k][j].number,&s[k][j].name,&s[k][j].score);
                    if(max[k] < s[k][j].score)
                     {
                        max[k] = s[k][j].score;
                        i=j;
                     }
                 }
              max[k] = i;
              k++;
           }
      }
    for(i=0;i<k;i++)
       printf("%d %s\n",s[i][max[i]].number,s[i][max[i]].name);

 
    return 0;
}
qybao 2021-01-01
  • 打赏
  • 举报
回复
把for(;;)改成for(;i<flag;i++) 如果一开始就输入n为0,那么flag就是0,没有任何输入数据,for(;;)无条件进入循环执行mystructioncontempt(s[i],len[i]);因为没有输入数据,s[i]和len[i]的内存信息都是垃圾信息,所以导致访问错误,所以改成for(;i<flag;i++)就可以控制flag为0时就不进入for循环
ggboy1999 2021-01-01
  • 打赏
  • 举报
回复
来人呐

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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