Devo estrarre un numero casuale tratto dal gruppo -> 6,10,14,18,22 senza usare particolari funzioni e neanche degli array, solo la funzione (s)rand e dei controlli.
Ho scritto questo:
- Codice: Seleziona tutto
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int check();
int i;
int main(){
int number=0;
number=check();
printf("Numero estratto: %d\n", number);
return 0;
}
int check(){
srand(time(NULL));
i = 6+rand()%22;
if (i==6 || i==10 || i==14 || i==18 || i==22){return i;}
else {return check();}
}
Però a volte va in seg fault. Ecco l'output:
- Codice: Seleziona tutto
muller:~/temp# gcc 5.14-c.c
muller:~/temp# ./a.out
Numero estratto: 22
muller:~/temp# ./a.out
Numero estratto: 18
muller:~/temp# ./a.out
Numero estratto: 18
muller:~/temp# ./a.out
Numero estratto: 22
muller:~/temp# ./a.out
Segmentation fault
muller:~/temp# ./a.out
Numero estratto: 14
..
muller:~/temp# ./a.out
Segmentation fault
muller:~/temp# ./a.out
Segmentation fault
...
Ho come l'impressione che se il numero estratto non sia tra quelli elencati e quindi vada all'else nella funzione check, vada in seg fault.



