Programme C qui n'exécute pas comme il faut
ZAK
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
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;
}
#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;
}
A voir également:
- Programme C qui n'exécute pas comme il faut
- Programme demarrage windows - Guide
- Comment fermer un programme qui ne répond pas - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Programme word gratuit - Guide
- Message programmé - Guide
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 (==).
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 (==).
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
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.