Mi a hibám ebben a c programkódban?
#include<stdio.h>
#define ELEM 5
int vizsgal(int t[], int N)
{
int i,poz[100],neg[100],p,n;
i=0;
p=0;
n=0;
for(i=0; i<N; i++)
{
if(t[i]>0)
{ poz[p]=t[i];
p++;
}
else if(t[i]<0)
{ neg[n]=t[i];
n++;
}
}
while(poz[p]!=EOF || poz[p]!='\0' )
p++;
if(p==N)
return 1;
while(neg[n]!=EOF || neg[n]!='\0' )
n++;
if(n==N)
return 0;
return 2;
}
//////////////////////
int main(void)
{
int t[ELEM]={2,54,0,1,42};
if((vizsgal(t,ELEM))==2)
printf("egyik sem");
else
printf("vagy poz vagy neg");
return 0;
}
Azt akarom vizsgálni, hogy ha a tömb minden eleme pozitív akkor 1, ha minden negatív akkor 0, különben 2-vel térjen vissza. A programkód lefordítódik, futáskor viszont ezt írja ki: Segmentation fault
while(poz[p]!=EOF || poz[p]!='\0' )
p++;
Ez mi akart lenni? Nem nulláztad ki a tömböt, így az nem nulla alapból, és nem is EOF vagy '\0' (ami NEM 0). Szóval ez így biztos hülyeség, de amúgy is: minek tömb erre? Letárolsz két intet: poz és neg. Ha találkozol egy pozitívval akkor poz 1 lesz, ha negatívval akkor neg 1, alapból meg 0. A végén meg megvizsgálod, hogy mi volt a helyzet.
\0 azért kell, és EOF hogy ne fusson ki a tömbből a ciklus
de amúgy már megoldottam, amúgy félig jó a megoldásod, de azért köszi
kivettem a poz, neg tömböket, és a p-n változókat vizsgáltam :)
a '\0' az a 0 kódú karakter (=0) és string végén van,
egy int tömbben mit keresne?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!