मुझे नहीं पता क्यों लेकिन यह कोड मुझे एक सेगमेंटेशन फॉल्ट देता है, मैं समझने की कोशिश कर रहा हूं, यह अभ्यास मूल रूप से जांचता है कि पहले सरणी में उपयोगकर्ता द्वारा डाली गई संख्याएं (ए) में कुछ शून्य और डुप्लिकेट संख्याएं हैं, और यदि वह है सच है, प्रोग्राम उस शून्य को सम्मिलित नहीं करेगा और अगले सरणी (बी) में डुप्लिकेट नहीं करेगा।

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

 }
 
}
0
Elio 29 नवम्बर 2020, 21:02

2 जवाब

सबसे बढ़िया उत्तर
#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");

  
 
}
1
LorenzoColombi 29 नवम्बर 2020, 23:02

for(j=0;ji++) के लिए यह आपका आंतरिक चक्र है आपको j नहीं i बढ़ाना है। इस तरह के लिए(j=0;jj++){

यदि आप वेतन वृद्धि करते हैं, तो आप सरणी की लंबाई से अधिक हो जाएंगे, जिससे सेगमेंटेशन फॉल्ट हो जाएगा

0
LorenzoColombi 29 नवम्बर 2020, 22:00