Programme C qui n'exécute pas comme il faut
ZAK
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct personne {
char nom[32] ;
char tel[16] ;
}Personne;
typedef struct carnet {
Personne t[20];
int n;
}Carnet ;
Personne creer ()
{ Personne p ;
printf ("nom de la personne \n") ;
getchar() ;
gets (p.nom);
getchar() ;
printf ("num de tel : \n");
gets (p.tel);
getchar() ;
return (p);
}
void AfficheP (Personne p)
{
printf ("%14s %8s\n",p.nom,p.tel);
//system ("PAUSE");
getchar() ;
}
void creer (Carnet *c )
{
c->n = 0 ;
}
void Add (Personne p,Carnet *c)
{
if (c->n <20 )
{
c->t[c->n] = p ;
(c->n)++ ;
}
else printf ("desoler mais le carnet est rempli veuillez suprimer qq contactes \n");
}
void AfficheC (Carnet c ) //pas besoin d'un passage par adresse vue que c'est un affichage et carnet ne sera pas modifié
{
int i ;
printf ("i)NOM TEL \n\n ");
for (i=0 ; i<(c.n) ;i++)
{
printf ("%d)" ,i ) ;
AfficheP (c.t[i]);
getchar() ;
// system ("PAUSE");
} //system ("PAUSE") ;
}
void Del (Carnet *c ,int pos )
{ int i;Personne temp;
for (i=pos ; i<(c->n)-1 ; i++ )
{
c->t[i] = c->t[i+1] ;
}
( c->n )--;
}
void Trier (Carnet *c) // tri par insertion :p je pense
{ int i ; int j ; Personne temp ;
for ( i = 0 ; i <( c->n )-2 ;i++)
{
for (j=i+1 ; j< (c->n)-1 ;j++)
{
if (strcmp (c->t[i].nom , c->t[j].nom) >0)
{
temp = c->t[i];
c->t[i] = c->t[j];
c->t[j]= temp ;
}
}
}
}
int Recherche (Carnet c)
{ char ch[32];int i ;
printf ("Nom de la personne a rechercher :\n");
gets (ch) ;
for (i=0 ; i<(c.n);i++)
{
if (strcmp ( (c.t[i]).nom , ch)==0 ) ;
return i ;
}
return -1 ;
}
int main ()
{ char choix ;
Carnet c; Personne p ;creer (&c);
do{
printf ("****************************Menu*********************************\n\n");
printf ("[A]Ajouter une personne au carnet \n");
printf ("[D]Suprimer une personne du carnet \n");
printf ("[V]Affichage du carnet\n");
printf ("[S]Recherche d'une personne dans le carnet\n");
printf ("[T]Tier les personne dans le carnet par ordre alphabetique\n");
printf ("[Q]Quitter \n");
printf ("\n\n") ;
scanf("%c",&choix);
switch (choix)
{
case 'A' : system ("cls" ); p = creer() ;
Add (p ,&c);break;
case 'D' : system ("cls"); int pos ;
do {
printf ("position de la personne a supprimer:\n");scanf("%d",pos);
}while ((pos <0) || (pos >= (c.n)));
Del (&c,pos);break;
case 'V' : system ("cls"); AfficheC(c) ;break;
case 'S' : system ("cls");int r;r=Recherche (c);
if( r = -1 ) printf ("le contact rechercher est introuvable \n");
else printf ("le contact rechercher est a la position %d du carnet\n",r);
break ;
case 'T' : system ("cls"); Trier(&c);break ;
case 'Q' : system ("cls");printf ("au revoir :p");break;
default :system ("cls");printf (" Erreur LE CARACTERE SAISIE EST INEXISTANT DANS LE MENU \n");break ;
}
}while (choix != 'Q');
system ("cls");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct personne {
char nom[32] ;
char tel[16] ;
}Personne;
typedef struct carnet {
Personne t[20];
int n;
}Carnet ;
Personne creer ()
{ Personne p ;
printf ("nom de la personne \n") ;
getchar() ;
gets (p.nom);
getchar() ;
printf ("num de tel : \n");
gets (p.tel);
getchar() ;
return (p);
}
void AfficheP (Personne p)
{
printf ("%14s %8s\n",p.nom,p.tel);
//system ("PAUSE");
getchar() ;
}
void creer (Carnet *c )
{
c->n = 0 ;
}
void Add (Personne p,Carnet *c)
{
if (c->n <20 )
{
c->t[c->n] = p ;
(c->n)++ ;
}
else printf ("desoler mais le carnet est rempli veuillez suprimer qq contactes \n");
}
void AfficheC (Carnet c ) //pas besoin d'un passage par adresse vue que c'est un affichage et carnet ne sera pas modifié
{
int i ;
printf ("i)NOM TEL \n\n ");
for (i=0 ; i<(c.n) ;i++)
{
printf ("%d)" ,i ) ;
AfficheP (c.t[i]);
getchar() ;
// system ("PAUSE");
} //system ("PAUSE") ;
}
void Del (Carnet *c ,int pos )
{ int i;Personne temp;
for (i=pos ; i<(c->n)-1 ; i++ )
{
c->t[i] = c->t[i+1] ;
}
( c->n )--;
}
void Trier (Carnet *c) // tri par insertion :p je pense
{ int i ; int j ; Personne temp ;
for ( i = 0 ; i <( c->n )-2 ;i++)
{
for (j=i+1 ; j< (c->n)-1 ;j++)
{
if (strcmp (c->t[i].nom , c->t[j].nom) >0)
{
temp = c->t[i];
c->t[i] = c->t[j];
c->t[j]= temp ;
}
}
}
}
int Recherche (Carnet c)
{ char ch[32];int i ;
printf ("Nom de la personne a rechercher :\n");
gets (ch) ;
for (i=0 ; i<(c.n);i++)
{
if (strcmp ( (c.t[i]).nom , ch)==0 ) ;
return i ;
}
return -1 ;
}
int main ()
{ char choix ;
Carnet c; Personne p ;creer (&c);
do{
printf ("****************************Menu*********************************\n\n");
printf ("[A]Ajouter une personne au carnet \n");
printf ("[D]Suprimer une personne du carnet \n");
printf ("[V]Affichage du carnet\n");
printf ("[S]Recherche d'une personne dans le carnet\n");
printf ("[T]Tier les personne dans le carnet par ordre alphabetique\n");
printf ("[Q]Quitter \n");
printf ("\n\n") ;
scanf("%c",&choix);
switch (choix)
{
case 'A' : system ("cls" ); p = creer() ;
Add (p ,&c);break;
case 'D' : system ("cls"); int pos ;
do {
printf ("position de la personne a supprimer:\n");scanf("%d",pos);
}while ((pos <0) || (pos >= (c.n)));
Del (&c,pos);break;
case 'V' : system ("cls"); AfficheC(c) ;break;
case 'S' : system ("cls");int r;r=Recherche (c);
if( r = -1 ) printf ("le contact rechercher est introuvable \n");
else printf ("le contact rechercher est a la position %d du carnet\n",r);
break ;
case 'T' : system ("cls"); Trier(&c);break ;
case 'Q' : system ("cls");printf ("au revoir :p");break;
default :system ("cls");printf (" Erreur LE CARACTERE SAISIE EST INEXISTANT DANS LE MENU \n");break ;
}
}while (choix != 'Q');
system ("cls");
return 0;
}
1 réponse
-
Bonjour,
Heureusement que le "Bonjour" est mis automatiquement. On devrait peut-être également rajouter le "merci". Bon ça c'est le côté "politesse".
Après, pour avoir un maximum de chance d'obtenir une réponse, tu pourrais nous faciliter la tâche : par exemple dire ce qui ne marche pas ? Erreur à l'exécution, à la compilation ? Mettre les messages d'erreur etc.
Et enfin, mettre ton code dans des balises "code" (à droite du bouton souligné) nous simplifie la lecture.
PS : j'ai vu un "if(...=-1)... Pour info, l'opérateur de comparaison est le double égal (==).