Arrays C型分段故障

Arrays C型分段故障,arrays,c,segmentation-fault,boolean,Arrays,C,Segmentation Fault,Boolean,我不知道为什么,但这段代码给了我一个分段错误,我试图理解,这个练习基本上检查用户在第一个数组(a)中插入的数字是否有零和重复的数字,如果是真的,程序将不会在下一个数组(B)中插入零和重复的数字 #包括 #包括 int main(){ int a[19],b[19],i,j,N,a=0; 做{ printf(“多少个数字?:”); scanf(“%d”和“&N”); }而(N>19); 对于(i=0;i这是你的内在for循环对于(j=0;j#包括 #包括 int main(){ int a[19]

我不知道为什么,但这段代码给了我一个分段错误,我试图理解,这个练习基本上检查用户在第一个数组(a)中插入的数字是否有零和重复的数字,如果是真的,程序将不会在下一个数组(B)中插入零和重复的数字

#包括
#包括
int main(){
int a[19],b[19],i,j,N,a=0;
做{
printf(“多少个数字?:”);
scanf(“%d”和“&N”);
}而(N>19);

对于(i=0;i这是你的内在for循环对于(j=0;j
#包括
#包括
int main(){
int a[19],b[19],i,j,N,a=0;
bool-idem,零;
//输入元素数
做{
printf(“多少个数字?:”);
scanf(“%d”和“&N”);
}而(N>19);
//输入阵列

for(i=0;现在看a[i]==a[j]的if不起作用,程序向我显示idem编号,我该怎么办?我用有效代码添加了一个答案。因为您的注释中有许多问题。请查看注释尝试将问题分解为更小的部分-注释掉不需要使错误发生的部分,只要数据仍然“应该是”在此之前有效,您将能够找出哪段代码导致了问题。如果您进一步细分它,也将使我们更容易回答。缩小范围的一个技巧是将其拆分为函数,或者预先初始化您打算使用的数据,就好像它是早期计算的结果一样。
   #include <stdio.h>
#include <stdbool.h> 

 int main () {
int a[19], b[19], i, j, N, A = 0;
  
  do{
      printf ("How many numbers? : ");
      scanf("%d", &N);
    }while (N > 19);
  
 for(i=0;i<N;i++)
    {
      printf ("Insert the number %d : ", i + 1);
      scanf ("%d", &a[i]);
}
for(i=0;i<N;i++){
    
    bool zero= false;
    bool idem= false;
    
 for(j=0;j<N;i++){
    if(a[i]==a[j])
        idem= true;
      if(a[i]==0)
        zero= true;
    }
    if(idem==false){
    b[A]=a[i];
    A++;
    }
    if (zero== false){
    b[A] = a[i];
    A++;
    }
    
 for (i=0;i<A;i++){
        printf ("%d", b[i]);
}

 }
 
}
#include <stdio.h>
#include <stdbool.h> 
  int main () {
  int a[19], b[19], i, j, N, A = 0;
  bool idem,zero;
  //Input number of elements
  do{
    printf ("How many numbers? : ");
    scanf("%d", &N);
  }while (N > 19);
  //Input array
  for(i=0;i<N;i++){
    printf ("Insert the number %d : ", i + 1);
    scanf ("%d", &a[i]);
  }

  //Checking duplicates and zeroes
  for(i=0;i<N;i++){ //for
    zero= false;
    idem= false;
      
  for(j=0;j<N;j++){
      if(a[i]==a[j]&&i!=j){  //add a condition (&& means AND). if j=i obviusly a[i]  = a [j]
        printf("idem found\n"); //printf debug
        idem= true;}
  }
  if(a[i]==0){
    printf("zero found\n"); //printf debug
    zero= true;}
      
    //a[i] mustn't be either duplicated nor zero. Not only one of this conditions.
    //Use the logical AND &&
    if(idem==false && zero==false){ 
    b[A]=a[i];
    A++;
    }
  }
     
  //output array
  //Must be collocated outside the "main for". I don't need to make an output in every iteration.
  printf("The B array is:\n");
    for (i=0;i<A;i++){
    printf (" %d ", b[i]);
  }
  printf("\n");

  
 
}