1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| #include <stdlib.h>
#include <string.h>
#include <stdio.h>
int * tableau_regle(int numRegle)
{
int m=7;
int * regle = NULL;
regle = malloc( 8 * sizeof(*regle));
/* Test sur le retour de malloc */
if(regle == NULL) {
return NULL;
}
/* Plus direct */
while(m>=0) {
regle[m] = numRegle&1;
numRegle >>= 1;
m--;
}
return regle;
}
void affiche_tab(int * tab, int nbr_elem)
{
int i=0;
while(i<nbr_elem)
{
printf("%d",tab[i]);
i++;
}
printf("\n");
}
int main(void)
{
char *end;
int nregle=0;
char buf[32];
int *res;
/* Ce code est plus long, car beaucoup de tests mais plus sûr */
while(nregle<1||nregle>255)
{
printf("entrez le numero de regle sur 8 bits (1 ... 255)");
/* On recupere la ligne */
if(fgets(buf, sizeof(buf), stdin) == NULL) {
fprintf(stderr,"Erreur avec fgets\n");
return EXIT_FAILURE;
}
/* Si on a au moins un '\n' alors on peut continuer sinon il faudrait demander a l'utilisateur de recommencer, je me facilite la vie en sortant */
if(strchr(buf, '\n')==NULL) {
fprintf(stderr,"Erreur avec strchr\n");
return EXIT_FAILURE;
}
/* On transforme l'entree en nombre */
nregle = strtol(buf, &end, 0);
/* Si on a eu un probleme, il faudrait demander a l'utilisateur de recommencer, je me facilite la vie en sortant */
if((end==buf)||(*end != '\n')) {
fprintf(stderr,"Erreur avec strtol\n");
return EXIT_FAILURE;
}
}
res = tableau_regle(nregle);
if(res==NULL) {
fprintf(stderr,"Erreur avec tableau_regle\n");
return EXIT_FAILURE;
}
printf("Voici le tableau correspondant à la regle %d\n",nregle);
affiche_tab(res,8);
free(res);
return EXIT_SUCCESS;
} |
Partager