Warm tip: This article is reproduced from serverfault.com, please click

arrays-C运动布尔型分割故障

(arrays - C exercise bool type segmentation fault)

发布于 2020-11-29 18:02:03

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

   #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]);
}

 }
 
}
Questioner
Elio
Viewed
11
LorenzoColombi 2020-11-30 04:02:14
#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");

  
 
}