Partage
  • Partager sur Facebook
  • Partager sur Twitter

HELP ! Affichage de mauvaises valeurs, que faire

Sous programmes, Structures...

Sujet résolu
    13 octobre 2021 à 16:16:45

    Bonjour, 

    J'ai récemment fait ce programme et j'aurait besoin d'aide : j'ai beau chercher, je ne trouve aucun sens à ce que renvoie les valeurs du programme.

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    
    typedef struct film
        {
            char titre;
            int annee;
            char realisateur;
            int duree;
            bool vuoupas;
            int note;
        }t_film;
    
    t_film instance(t_film film1)
    {
        printf("Entrez le nom du film : \n", film1.titre);
        scanf("%c", &film1.titre);
        printf("Entrez la date de sortie du film : \n", film1.annee);
        scanf("%d", &film1.annee);
        fflush(stdin);
        printf("Entrez le nom du realisateur : \n", film1.realisateur);
        scanf("%c", &film1.realisateur);
        printf("Entrez la durée en minutes du film (sans secondes): \n", film1.duree);
        scanf("%d", &film1.duree);
        fflush(stdin);
        printf("Avez-vous vu ce film ? : \n", film1.vuoupas);
        scanf("%d", &film1.vuoupas);
        printf("Noter ce film sur 10 (pas de virgules) ! : \n", film1.note);
        scanf("%d", &film1.note);
        fflush(stdin);
        return film1;
    }
    
    void affichage(t_film film1)
    {
        instance(film1);
        printf("Le nom du film est %c\n", film1.titre);
        printf("L'annee de parution du film est %d\n", film1.annee);
        printf("Le nom du realisateur est %c\n", film1.realisateur);
        printf("La duree du film est de %d\n", film1.duree);
        printf("Avez-vous vu ce film? %d\n", film1.vuoupas);
        printf("Votre note sur ce film %d sur 10\n", film1.note);
    }
    int main()
    {
        t_film film1;
        affichage(film1);
        return 0;
    }

    (Pour les noms je n'ai pas utilisé des chaines de caractères mais seulement un type char)

    Que puis-je faire ? Je suis bloqué depuis 1h...

    -
    Edité par Clément 2910 13 octobre 2021 à 16:42:03

    • Partager sur Facebook
    • Partager sur Twitter
      13 octobre 2021 à 16:21:12

      Utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).
      • Partager sur Facebook
      • Partager sur Twitter
      ...
        13 octobre 2021 à 16:31:03

        C'est fait, merci !

        -
        Edité par Clément 2910 13 octobre 2021 à 16:43:12

        • Partager sur Facebook
        • Partager sur Twitter
          13 octobre 2021 à 16:46:23

          En c les paramètres sont passés par valeur

          La fonction instance met des valeurs dans une copie de la structure avec laquelle elle est appelee ligne 37.

          Pour qu'une fonction modifie une structure, transmettre l'adresse de la structure dans un pointeur.

          -
          Edité par michelbillaud 13 octobre 2021 à 16:49:01

          • Partager sur Facebook
          • Partager sur Twitter
            13 octobre 2021 à 16:48:04

            ça marche ! Mais vous êtes sur qu'on doit absolument utiliser les pointeurs ?

            Retourner la valeur film1 ne fonctionne pas dans un struct du coup ?

            -
            Edité par Clément 2910 13 octobre 2021 à 16:51:23

            • Partager sur Facebook
            • Partager sur Twitter
              13 octobre 2021 à 17:06:09

              Clément 2910 a écrit:

              ça marche ! Mais vous êtes sur qu'on doit absolument utiliser les pointeurs ?

              Retourner la valeur film1 ne fonctionne pas dans un struct du coup ?

              -
              Edité par Clément 2910 il y a 8 minutes


              1) non, mais c'est pas moi qui ai montré du code passant la structure en paramètre.

              2) une fonction peut effectivement retourner une structure, mais il ne s'agit plus de passage de paramètre.  Il faut se servir de ce qu'elle retourne

              int main()
              {
                  t_film film1 = lire_film();
                  afficher_film(film1);
                  return 0;
              }
              
              t_film lire_film(void) 
              {
                  t_film f;
                  scanf(...);
                  return f;
              }
              

              PS: l'affichage n'ayant pas pour rôle de modifier la structure, on peut la passer comme indiqué ci-dessus, mais en général c'est déconseillé. On passe son adresse pour éviter de faire une copie de la structure.

               PS2: dans le code d'origine, on pouvait s'en tirer en récupérant le résultat du return avec

              film1 = instance(film1);

              mais quelle utilité de passer film1 en paramètre ?


              -
              Edité par michelbillaud 13 octobre 2021 à 17:13:08

              • Partager sur Facebook
              • Partager sur Twitter

              HELP ! Affichage de mauvaises valeurs, que faire

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown