纠正分段错误

时间:2014-11-27 05:46:29

标签: c++ io segmentation-fault

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
using namespace std;

int main(){
    int i=0,n,h,k;
    k = (int)pow(10,5);
    int c[k];
    scanf("%d%d",&n,&h);

    if((n>=1 && n<=(int)pow(10,5)) && (h>=1 && h<=(int)pow(10,8))){ 
      int arr[n];

      do{
          scanf("%d",&arr[i]);
          if(arr[i] > h){
            cout<<"Error !";
            exit(1);
          }
          i++;
      }while(i!=(n-1));

      i=0;

      do{                    /*The fault occurs somewhere here, probably*/
          scanf("%d",&c[i]);
          i++;
      }while(c[i]!=0);

      if(i>(int)pow(10,5)){
          cerr<<"Error !";
          exit(0);
      }

    }
    return 0;
}

我尝试使用scanf()从控制台上的不同行接受一些数字(对数字的上限和下限有一些约束) - 问题是我得到了一个在某处我发表评论的地方出现了细分错误 - 我似乎无法弄清楚错误发生的位置 - 有人能指出我所犯的错误吗?

2 个答案:

答案 0 :(得分:2)

我认为问题在这里

do{                  
     scanf("%d",&c[i]);
     i++;
 }while(c[i]!=0);

考虑i的当前值为0,并且您在c[0]的递增值之后输入值i。现在i成为1,然后您正在检查c[1] != 0这是问题

使用

i=-1;

do{     
     i++;             
     scanf("%d",&c[i]);
  }while(c[i]!=0);

答案 1 :(得分:1)

scanf("%d",c[i])应为scanf("%d",&c[i])