Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-比较整数时出现分段错误_C_Segmentation Fault - Fatal编程技术网

C-比较整数时出现分段错误

C-比较整数时出现分段错误,c,segmentation-fault,C,Segmentation Fault,这是我代码的一部分。当我运行代码时,它请求用户输入,然后将其与记录在我的结构中的另一个整数进行匹配。当用户输入匹配时,它工作正常。但当用户输入错误时,就会出现分段错误。在哪里,我应该对代码进行更改 long int userInput,endCheck; // Input from user int flag=0; // check for match int status; int c; // controlling ctrl+D int position= 999; // position

这是我代码的一部分。当我运行代码时,它请求用户输入,然后将其与记录在我的结构中的另一个整数进行匹配。当用户输入匹配时,它工作正常。但当用户输入错误时,就会出现分段错误。在哪里,我应该对代码进行更改

long int userInput,endCheck; // Input from user
int flag=0; // check for match
int status;
int c; // controlling ctrl+D
int position= 999; // position of where the user input and data matched

LABEL:
    printf("\n\t---------------------------------------\n");


    printf("\n\nPlease enter the student ID which you want to find(3-times CTRL+D for finish):\n");



   scanf("%d",&userInput);

   if( (c=getchar()) == EOF){
     exit(0);
     }




    for(i=0;i<lines,flag==0;i++){

       if(index[i].id == userInput){
          position=i;
          flag=1;
       }else{
          position=999;
        }
    }

    if(flag==0){
    printf("id not found");
    }


 studentInfo info; // for storing the information which we will take between determined offsets
    if(position!= 999){
           if ( (pos = lseek(mainFile,index[position].offset , SEEK_SET)) == -1)/*going to determined offset and setting it as starting offset*/
        { perror("classlist"); return 4; }


            while ( (ret= read(mainFile,&info, sizeof(info))) > 0  ){
           printf("\n\nStudent ID: %d, Student Name: %s\n\n",info.id,info.name);
                   break;// to not take another students' informations.
            }

   }
flag=0; 
goto LABEL;


printf("Program is terminated");
long int userInput,endCheck;//用户输入
int标志=0;//检查是否匹配
智力状态;
int c;//控制ctrl+D
int位置=999;//用户输入和数据匹配的位置
标签:
printf(“\n\t----------------------\n”);
printf(“\n\n请输入要查找的学生ID(3次CTRL+D表示完成):\n”);
scanf(“%d”、&userInput);
如果((c=getchar())==EOF){
出口(0);
}
对于(i=0;i=0){
printf(“\n\n学生ID:%d,学生姓名:%s\n\n”,info.ID,info.Name);
break;//不获取其他学生的信息。
}
}
flag=0;
后藤标签;
printf(“程序终止”);

原因可能是,在循环结束时,在带有迭代器“i”的“if”语句中,您正在到达一个不存在的索引

或者在最后一个if中,访问数组的“位置”索引。检查这些限制


另外,try对于解决此类问题也很有用。

使用不需要的逗号进行循环的正确方法如下。当您找到正确的
索引[i].id
时,可以使用
break
提前退出循环

for(i=0;i<lines;i++){
    if(index[i].id == userInput){
        position=i;
        flag=1;
        break;
    }
}

用于(i=0;i什么是
索引
?哪一行有seg错误?您指的是什么“错误输入”?为什么使用gotos?索引是我的结构。在我的结构中,我有一个学生ID,我正在尝试将其与用户的输入匹配。导致seg错误的输入是什么?记录的信息是什么?请让我知道当你用gotos提交格式不好的代码时,你会得到分数。我对你的老师有多好很感兴趣。“可能”不适合回答。这应该作为评论发布,当你有足够的声誉时,你可以这样做。因此,为了获得更高的声誉,我应该尽我所能提供帮助。如果我不能评论,我该怎么做而不是回答?如果你不能给出正确的答案,那么在你可以的地方找到另一个问题。我知道这一开始有点令人沮丧“我不认为有人能绝对肯定地回答这个问题,因为这个问题是不完整的。我说“可能”不是因为我是一个noob,而是因为我不是一个知道代码中实际发生了什么的魔术师,所以这个问题会被标记出来,并且很可能会被删除。如果这个问题不可回答,那就很容易了。不要回答。当你想要澄清的时候,你会使用评论。但是没有足够的声誉并不是发布命令的借口作为一个答案。别误会我。我一开始就犯了这个错误,这是可以理解的。此外,我不是负责人。我只是告诉你,如果你这样做,人们会投反对票并给你打旗号。所以,找到你能回答的问题,然后回答它们。这是我能给出的唯一建议。