Programme C qui n'exécute pas comme il faut

ZAK -  
fiddy Messages postés 11653 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;
}

1 réponse

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
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 (==).
0
ZAK
 
bon vous avez raison pour le if mais le probleme c'est au niveau de la fonction Del surtout le programme m'affiche la fenêtre windows ou il y'a fermer le programme ou bien rechercher une solution en ligne et mercii d'avance
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Précise exactement ce qui ne va pas dans ton programme, ce que tu veux.
0