Probleme Fonction de Hachage
Bonjour a tous et merci par avance d'essayer de resoudre mon probleme.
L'exo consiste a inserer/supprimer/rechercher des patronimes dans un tableau.
Mon probleme vient du fait que j'arrive a compiler le prog (j'utilise codeblocks) mais que quand je lance l'exc ca plante.
J'ai 6 warning dans mon programme qui je pense sont la cause du plantage de la fenetre ms-dos.
Les 6 warnings sont :
warning: passing arg 1 of `strcpy' makes pointer from integer without a cast
warning: passing arg 1 of `strcmp' makes pointer from integer without a cast
a chaque fois que je veux comparer ou copier mon tableau d'entier (ou chaque case pointe vers une chaine de caractere (patronime) )avec mon char rentrer par l'utilisateur.
Si vous aviez une idée de comment contourner ceci et qu'au moins je puisse lancer mon prog et voir ce qui marche et ce qui ne marche pas ... je vous en serez reconnaissant
Merci d'avance.
Code:
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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
int T[N];
int i;
int inserer(char *s){
int compteur=0;
int n=0;
char temp;
for(i=0;i<(strlen(s)-1);i++){
temp=s[i];
compteur=compteur +(temp-96);
}
while(n<5){
if(strcmp(T[compteur%N],"")!=0){
temp=s[0];
compteur=compteur + 13*temp;
n++;
}
else{
strcpy(T[compteur%N],s);
return 1;
}
}
return 0;
}
int rechercher(char *s){
for(i=0;i<N;i++){
if(strcmp(T[i],s)!=0)
return 0;
else
return 1;
}
}
int supprimer(char *s){
for(i=0;i<N;i++){
if(strcmp(T[i],s)!=0)
return 0;
else{
strcpy(T[i],"");
return 1;
}
}
}
int main(){
char *s;
int i;
int choix;
for(i=0; i<N; i++) /*initialisiation de T a 0*/
strcpy(T[i], "");
//int bool=1; //booleen
while(1){
printf("Entrez votre choix \n");
printf("1-Inserer \n");
printf("2-Rechercher \n");
printf("3-Supprimer \n");
printf("4-Fin du programme \n");
if(scanf("%d",&choix)==0)
return EXIT_FAILURE;
switch(choix){
case 1:
printf("Entrez un patronyme en minuscule\n");
if (scanf("%s",s)==0)
return EXIT_FAILURE;
printf("Vous avez choisi la commande inserer \n");
if(inserer(s)==0)
printf("Le patronyme n'a pu etre inserer \n");
else
printf("Le patronyme a été inserer \n");
break;
case 2:
printf("Entrez un patronyme en minuscule\n");
if (scanf("%s",s)==0)
return EXIT_FAILURE;
printf("Vous avez choisi la commande rechercher \n");
if(rechercher(s)==0)
printf("Le patronyme n'est pas présent dans le tableau \n");
else
printf("Le patronyme est présent dans le tableau \n");
break;
case 3:
printf("Entrez un patronyme en minuscule\n");
if (scanf("%s",s)==0)
return EXIT_FAILURE;
printf("Vous avez choisi la commande supprimer \n");
if(supprimer(s)==0)
printf("Le patronyme ne fait pas partit du tableau et n'a donc pas pu etre supprimer \n");
else
printf("Le patronyme a bien été supprimer avec succes \n");
break;
case 4:
printf("Entrez un patronyme en minuscule\n");
if (scanf("%s",s)==0)
return EXIT_FAILURE;
printf("Vous avez choisi la commande fin \n");
return EXIT_SUCCESS;
//break;
default:
printf("Vous n'avez pas choisi une commande valide \n");
printf("Veuillez refaire un choix \n");
break;
}
}
return EXIT_SUCCESS;
} |