C练习布尔型分割错误



我不知道为什么,但这段代码给了我一个分段错误,我正在努力理解,这个练习基本上检查用户在第一个数组(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]);
}
}

}
#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 foundn"); //printf debug
idem= true;}
}
if(a[i]==0){
printf("zero foundn"); //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");


}

这是循环的内在对于(j=0;j<N;i++(你必须增加j而不是i

如果你增加i,你将超过阵列长度,从而发生分段故障

最新更新