Intégrer une fonction à mon programme

Fermé
pépereF Messages postés 36 Date d'inscription dimanche 11 décembre 2005 Statut Membre Dernière intervention 25 janvier 2008 - 6 juil. 2007 à 08:34
pépereF Messages postés 36 Date d'inscription dimanche 11 décembre 2005 Statut Membre Dernière intervention 25 janvier 2008 - 9 juil. 2007 à 23:05
Bonjour,
voici le programme (qui fonctionne) d'un repertoire telephonique auquel je voudrai integrer une fonction "lecture()".
d'une part,une personne nommé 'M. De la Cédraie' ne peut pas figurer dans mon fichier,le nom est entrée avec une instruction scanf qui ne permet de saisir qu'un mot et non pas une chaine de caractéres comportant des éspaces.
d'autre part,si je veut entrer Monsieur 'Dupont' et que je demande au sous programme rechercher() un monsieur 'DUPOND' cela ne marchera pas car mon programme fait la difference entre les majuscules et les minuscules.

On me demande donc d'écrire une fonction remplaçant scanf et permettant d'entrer une chaine de caractéres un par un dans un tableau,y compris les éspaces et traduisant chaque majuscules entrée en sa minuscule correspondante.
voila je voudrai ecrire une fonction appelée lecture() que je pourrai intégrer ultérieurement à mon programme.(sans le modifier)
et à quel niveau doit-je l'intégrer?
merci d'avance pour votre aide
voici mon programme,je travail sur DevC++

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
FILE *fd;/*Declaration d'une variable fd de type fichier formaté*/

struct enreg/*Structure de type struct enreg*/
{
char *nom;/*déclaration de la variable nom qui pointe sur un char*/
char *tel;/*déclaration de la variable tel qui pointe sur un char*/
};
/*Affiche une question et attend la saisie O ou N*/
int question(char *texte)/*Fonction question de type int ayant pour
arguement texte qui pointe sur un char*/

{
char reponse=' ';/*Déclaration de la variable reponse de type char
auquel on affecte ' '*/

while (reponse!='o' && reponse!='n')/*tant que reponse est different de 'o'
et reponse est different de 'n'*/
{
printf("%s",texte);/*affichage de la saisie*/
reponse = getch();/*Attente d'un caractére au clavier*/
printf("\n");
/*convertion des majuscules en minuscules*/
if (reponse=='O') reponse='o';
if (reponse=='N') reponse='n';
if (reponse!='o' && reponse!='n')
printf("!!!repondre par O ou N!!!\n");
}
if (reponse=='o')
return 1; /*1 c'est vrai*/
else
return 0; /*0 c'est faux*/

}
/*création d'une nouvelle fiche*/
void creation()
{
/*déclaration des variable locales auquel on affecte de la mémoire dynamique*/
struct enreg *fiche = malloc(sizeof(struct enreg));
fiche->nom = malloc(30 * sizeof(char));
fiche->tel = malloc(10 * sizeof(char));
int reponse;

/*demande du nom et du numero de téléphone*/
printf("...Creation d'une fiche...\n");
printf("Nom ? ");
scanf("%s",fiche->nom);
printf("Numero de telephone ? ");
scanf("%s",fiche->tel);

/*Demande confirmation d'enregistrement*/
reponse = question("Enregistrer la fiche (O/N) ?");

/*si NON, on sort directement*/
if(reponse)/*si 1 on enregistre, voir la fonction question, sinon on va..*/
{
/*se placer à la fin du fichier*/
fseek(fd,0,2);

/*sinon on enregistre à la fin du fichier*/
fprintf(fd,"%s %s\n",fiche->nom,fiche->tel);
printf("Fiche enregistrée\n");/*pour dire que c'est enregisté*/
}
/*libération de la mémoire*/
free(fiche->nom);
free(fiche->tel);
free(fiche);
}
void rechercher()
{
/*déclaration des variable locales*/
struct enreg *fiche = malloc(sizeof(struct enreg));/*pour pouvoir...*/
fiche->nom = malloc(30 * sizeof(char));/*lire notre fichier...*/
fiche->tel = malloc(10 * sizeof(char));/*et y placer nos variables pour
les comparer...*/

char *nom = malloc(30*sizeof(char));/*à notre chaine allouer dynamiquement*/
int err;
int reponse;

/*demande le nom à rechercher*/
printf("...rechercher une fiche...\n");
printf("nom a chercher ? ");
scanf("%s",nom);

/*positionnement au début du fichier*/
fseek(fd,0,0);

/*lecture d'une fiche*/
err = fscanf(fd,"%s%s",fiche->nom,fiche->tel);

/*si fin du fichier ou erreur*/
while (err > 0)
{
/*si la fiche correspond*/
if (strcmp(nom, fiche->nom) == 0)
printf("nom:%s telephone:%s\n",fiche->nom,fiche->tel);

/*on lit une autre fiche*/
err=fscanf(fd,"%s%s",fiche->nom,fiche->tel);

}
/*Libération de la mémoire*/
free(fiche->nom);
free(fiche->tel);
free(fiche);
free(nom);

reponse = question("continuer la recherche (O/N)?");
if (reponse)
rechercher();/*on retourne dans la fonction*/
}
/*Affichage du menu générale et attend l'entrée d'un choix*/
int menu()

{
int choix=0;
while (choix<1 || choix>3)
{
printf("menu : \n");
printf("1 - creation d'une nouvelle fiche\n");
printf("2 - recherche d'une fiche\n");
printf("3 - quitter\n");
printf("votre choix ? ");
scanf("%d",&choix);
if (choix<1 || choix>3)
printf("!!!entrez 1, 2 ou 3 !!!\n");
}
return choix;
}

/*programme principale*/
int main()
{
int choix=0;
fd=fopen("rep.dat","a+");
printf("...REPERTOIRE TELEPHONIQUE...\n");
while (choix!=3)
{
choix=menu();
switch (choix)/*suivant le choix*/
{
case 1 : creation();/*Cas 1, accéder àla fonction création*/
break;
case 2 : rechercher();/*cas 2, accéder à la fonction rechercher*/
break;
default : break;/*quitter (ne rien faire)*/
}
}
fclose(fd);/*Fermeture du fichier*/

printf("Merci, et au revoir\n");
scanf("%s");
return 0;
}
A voir également:

1 réponse

pépereF Messages postés 36 Date d'inscription dimanche 11 décembre 2005 Statut Membre Dernière intervention 25 janvier 2008 2
9 juil. 2007 à 23:05
#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
FILE *fd;/*Declaration d'une variable fd de type fichier formaté*/ 

struct enreg/*Structure de type struct enreg*/ 
{ 
char *nom;/*déclaration de la variable nom qui pointe sur un char*/ 
char *tel;/*déclaration de la variable tel qui pointe sur un char*/ 
}; 
/*Affiche une question et attend la saisie O ou N*/ 
int question(char *texte)/*Fonction question de type int ayant pour 
arguement texte qui pointe sur un char*/ 

{ 
char reponse=' ';/*Déclaration de la variable reponse de type char 
auquel on affecte ' '*/ 

while (reponse!='o' && reponse!='n')/*tant que reponse est different de 'o' 
et reponse est different de 'n'*/ 
{ 
printf("%s",texte);/*affichage de la saisie*/ 
reponse = getch();/*Attente d'un caractére au clavier*/ 
printf("\n"); 
/*convertion des majuscules en minuscules*/ 
if (reponse=='O') reponse='o'; 
if (reponse=='N') reponse='n'; 
if (reponse!='o' && reponse!='n') 
printf("!!!repondre par O ou N!!!\n"); 
} 
if (reponse=='o') 
return 1; /*1 c'est vrai*/ 
else 
return 0; /*0 c'est faux*/ 

} 
/*création d'une nouvelle fiche*/ 
void creation() 
{ 
/*déclaration des variable locales auquel on affecte de la mémoire dynamique*/ 
struct enreg *fiche = malloc(sizeof(struct enreg)); 
fiche->nom = malloc(30 * sizeof(char)); 
fiche->tel = malloc(10 * sizeof(char)); 
int reponse; 

/*demande du nom et du numero de téléphone*/ 
printf("...Creation d'une fiche...\n"); 
printf("Nom ? "); 
scanf("%s",fiche->nom); 
printf("Numero de telephone ? "); 
scanf("%s",fiche->tel); 

/*Demande confirmation d'enregistrement*/ 
reponse = question("Enregistrer la fiche (O/N) ?"); 

/*si NON, on sort directement*/ 
if(reponse)/*si 1 on enregistre, voir la fonction question, sinon on va..*/ 
{ 
/*se placer à la fin du fichier*/ 
fseek(fd,0,2); 

/*sinon on enregistre à la fin du fichier*/ 
fprintf(fd,"%s %s\n",fiche->nom,fiche->tel); 
printf("Fiche enregistrée\n");/*pour dire que c'est enregisté*/ 
} 
/*libération de la mémoire*/ 
free(fiche->nom); 
free(fiche->tel); 
free(fiche); 
} 
void rechercher() 
{ 
/*déclaration des variable locales*/ 
struct enreg *fiche = malloc(sizeof(struct enreg));/*pour pouvoir...*/ 
fiche->nom = malloc(30 * sizeof(char));/*lire notre fichier...*/ 
fiche->tel = malloc(10 * sizeof(char));/*et y placer nos variables pour 
les comparer...*/ 

char *nom = malloc(30*sizeof(char));/*à notre chaine allouer dynamiquement*/ 
int err; 
int reponse; 

/*demande le nom à rechercher*/ 
printf("...rechercher une fiche...\n"); 
printf("nom a chercher ? "); 
scanf("%s",nom); 

/*positionnement au début du fichier*/ 
fseek(fd,0,0); 

/*lecture d'une fiche*/ 
err = fscanf(fd,"%s%s",fiche->nom,fiche->tel); 

/*si fin du fichier ou erreur*/ 
while (err > 0) 
{ 
/*si la fiche correspond*/ 
if (strcmp(nom, fiche->nom) == 0) 
printf("nom:%s telephone:%s\n",fiche->nom,fiche->tel); 

/*on lit une autre fiche*/ 
err=fscanf(fd,"%s%s",fiche->nom,fiche->tel); 

} 
/*Libération de la mémoire*/ 
free(fiche->nom); 
free(fiche->tel); 
free(fiche); 
free(nom); 

reponse = question("continuer la recherche (O/N)?"); 
if (reponse) 
rechercher();/*on retourne dans la fonction*/ 
} 
/*Affichage du menu générale et attend l'entrée d'un choix*/ 
int menu() 

{ 
int choix=0; 
while (choix<1 || choix>3) 
{ 
printf("menu : \n"); 
printf("1 - creation d'une nouvelle fiche\n"); 
printf("2 - recherche d'une fiche\n"); 
printf("3 - quitter\n"); 
printf("votre choix ? "); 
scanf("%d",&choix); 
if (choix<1 || choix>3) 
printf("!!!entrez 1, 2 ou 3 !!!\n"); 
} 
return choix; 
} 

/*programme principale*/ 
int main() 
{ 
int choix=0; 
fd=fopen("rep.dat","a+"); 
printf("...REPERTOIRE TELEPHONIQUE...\n"); 
while (choix!=3) 
{ 
choix=menu(); 
switch (choix)/*suivant le choix*/ 
{ 
case 1 : creation();/*Cas 1, accéder àla fonction création*/ 
break; 
case 2 : rechercher();/*cas 2, accéder à la fonction rechercher*/ 
break; 
default : break;/*quitter (ne rien faire)*/ 
} 
} 
fclose(fd);/*Fermeture du fichier*/ 

printf("Merci, et au revoir\n"); 
scanf("%s"); 
return 0; 
}

aidez-moi svp
0