Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Affichage qui ne se fait pas

Sujet résolu
    6 janvier 2022 à 16:51:09

    Bonjour,

    J'ai écrit ce programme qui permets de créer un annuaire tout fonctionne correctement sauf si j'enlève les printf(" \n"); de mon main() (lignes 64 et 66), quand je le fais on me demande bien de saisir un contact mais l'affichage de la liste de contacts ne se fait plus et je ne comprend pas pourquoi. Avez vous des idées sur la question ?

    /* 
    contacts :
    Martin : 0612345678
    Agathe : 0623456789
    Manu   : 0634567890
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define NBCONTACTS 5 
    #define TAILLE_NOM 40
    
    typedef struct contact {
    char *nom;
    long int numero;
    }CONTACT;
    
    void saisir(CONTACT *annuaire, int taille_tableau){
    	for (int contact = 0; contact < taille_tableau; ++contact){
    		if (annuaire[contact].nom == NULL){
    			printf("saisir le nom du contact : ");
    			char nom[TAILLE_NOM];
    			fgets(nom, TAILLE_NOM, stdin);
    
    			printf("saisir le numero du contact : ");
    			long int numero;
    			scanf("%li",&numero);
    			CONTACT *nouveau_contact;
    			nouveau_contact -> nom = malloc(sizeof(char) * TAILLE_NOM);;
    			strcpy(nouveau_contact -> nom, nom);
    			nouveau_contact -> numero = numero ;
    			annuaire[contact] = *nouveau_contact;
    			return;
    		}
    	}
    	printf("plus de place\n");
    }
    
    void afficher_contacts(CONTACT *annuaire, int taille_max){
    		for (int contact = 0; contact < taille_max; ++contact)
    		{
    
    			if(annuaire[contact].nom != NULL && annuaire[contact].numero != 0){
    				printf("-----contact numero %d----- \n",contact+1);
    				printf("nom : %s",annuaire[contact].nom);
    				printf("numero : %li ", annuaire[contact].numero);
    			}
    		}
    }
    
    void initialiser_annuaire(CONTACT *annuaire, int taille_max){
    	for (int contact = 0; contact < taille_max; ++contact)
    	{
    		annuaire[contact].nom = NULL;
    	}
    }
    
    void main(){
    	CONTACT annuaire[NBCONTACTS];
    	initialiser_annuaire(annuaire, NBCONTACTS);
    	printf(" \n");
    	saisir(annuaire, NBCONTACTS);
    	printf(" \n");
    	afficher_contacts(annuaire, NBCONTACTS);
    	return;
    }



    -
    Edité par Theau.B 6 janvier 2022 à 16:59:55

    • Partager sur Facebook
    • Partager sur Twitter
      6 janvier 2022 à 16:56:13

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Mauvais titre

      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

      Pour modifier votre titre, éditez le premier message de votre sujet.

      (titre originel : Problème affichage en C)

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        6 janvier 2022 à 17:08:42

        Yo !

        Ligne 30 tu accèdes au champ ->nom mais ce dernier n'existe pas. En effet ligne 29 tu crées un pointeur non initialisé.
        A partir de là tu vas modifier des valeurs dans la mémoire à des adresses aléatoires, on parle de comportement indéfini.

        Tu peux par exemple modifier la ligne 29 pour :

        CONTACT *nouveau_contact = malloc(sizeof(CONTACT));

        Il faudra penser à free() les malloc() !

        Hors sujet: main() devrait renvoyer un int



        • Partager sur Facebook
        • Partager sur Twitter
          6 janvier 2022 à 17:28:08

          Merci beaucoup de ta réponse rapide cela m'a beaucoup aidé.
          • Partager sur Facebook
          • Partager sur Twitter

          [C] Affichage qui ne se fait pas

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown