Arrays C型分段故障
我不知道为什么,但这段代码给了我一个分段错误,我试图理解,这个练习基本上检查用户在第一个数组(a)中插入的数字是否有零和重复的数字,如果是真的,程序将不会在下一个数组(B)中插入零和重复的数字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]
#包括
#包括
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");
}