Partage
  • Partager sur Facebook
  • Partager sur Twitter

Plusieurs problemes

    27 juin 2007 à 12:48:20

    Salut,
    je commence la programmation et j'ai quelques problemes :-°

    J'aimerais savoir pourquoi lorsque je fais printf("%s", chaine); avec une chaine de lettre j'obtient le texte contenu dans le tableau chaine (donc ses valeurs). Alors que lorsque je fais printf("%ld", tableau); avec un tableau de int, j'obtient l'adresse de la premiere case du tableau? (je sais qu'en faisant printf("%ld", tableau[0]) ca marcherait mais je cherche à comprendre).


    Ensuite j'aimerais egalement savoir pourquoi ce programme que j'ai fais ne se lance pas. :(
    Les de la compilation il me met :
    "Switching to target: default
    Linking console executable: C:\Documents and Settings\Propriétaire\Mes documents\console.exe
    .objs\main.o:main.c:(.text+0x125): undefined reference to `prinf'
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 0 seconds)"

    Contenu du fichier main.h :

    #ifndef PROGRAMME
    #define PROGRAMME

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct Utilisateur Utilisateur;
    struct Utilisateur
    {
    char prenom[100];
    char nom[100];
    };

    #endif


    Contenu du fichier main.c

    #include "main.h"

    int main(int argc, char *argv[])
    {

    Utilisateur joueur[2];
    int i;

    for(i = 0; i < 2; i++)
    {
    printf("Quel est le prénom du joueur 1?\n");
    scanf("%s", joueur[i].prenom);
    printf("Quel est le nom du joueur 2?\n");
    scanf("%s", joueur[i].nom);
    }

    for (i = 1; i < 3; i++)
    {
    prinf("Le prénom du joueur %ld est %s", i, joueur[i].prenom);
    printf("Le nom du joueur %ld est %s", i, joueur[i].nom);
    }

    }


    (D'ailleurs j'aimerais aussi savoir pourquoi dans son tuto de M@teo21 ne fais jamais de main.h plz)

    Voila, merci d'avance à ceux qui m'aideront (s'il y en a :) )
    • Partager sur Facebook
    • Partager sur Twitter
      27 juin 2007 à 13:24:02

      Citation : monster389

      balises



      Peut être que préciser ne ferait pas de mal :?

      <code type="c">TON CODE ICI</code >
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        27 juin 2007 à 13:24:53

        2eme for du main

        C'est printf pas prinf ^^
        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2007 à 13:50:18

          Citation : Willbeen

          J'aimerais savoir pourquoi lorsque je fais printf("%s", chaine); avec une chaine de lettre j'obtient le texte contenu dans le tableau chaine (donc ses valeurs).


          printf() est une fonction puissante mais assez complexe. C'est une fonction dite 'variadic', c'est à dire que son prototype est composé d'au-moins un paramètre formel (le format) et d'une liste variable de paramètres (ou 'ellipse' : ...). Par variable, on entend en nombre et en type.

             char chaine[]= "hello";
             printf("%s", chaine);

          chaine est une valeur constante qui a pour valeur et pour type l'adresse du premier élément du tableau de char 'chaine'.

          Ca tombe bien, car avec "%s", printf() attend l'adresse d'un char appartenant à un tableau de char, initialisé avec des valeurs de caractères et terminée par un 0, ce qui est le cas ici.

          Nota, le comportement est identique avec

             char const *chaine= "hello";
             printf("%s", chaine);

          car ici, chaine est un pointeur (modifiable) vers le premier char d'une chaine non-modifiable.

          Le comportement est donc parfaitement défini et conforme.

          Citation : Pas de titre


          Alors que lorsque je fais printf("%ld", tableau); avec un tableau de int, j'obtient l'adresse de la premiere case du tableau? (je sais qu'en faisant printf("%ld", tableau[0]) ca marcherait mais je cherche à comprendre).


          Tu obtiens n'importe quoi. En effet, "%ld" attend une valeur de type long, or tu lui passe l'adresse d'un char, ce qui n'a rien à voir. Le comportement est indéfini.

          Il faut que le paramètre et le formateur soit strictement compatibles. Un bon réglage de gcc :

          http://mapage.noos.fr/emdel/codage.htm#cfg_compilo

          permet de montrer les erreurs.

          Ensuite j'aimerais egalement savoir pourquoi ce programme que j'ai fais ne se lance pas. :(
          Les de la compilation il me met :
          "Switching to target: default
          Linking console executable: C:\Documents and Settings\Propriétaire\Mes documents\console.exe
          .objs\main.o:main.c:(.text+0x125): undefined reference to `prinf'
          collect2: ld returned 1 exit status
          Process terminated with status 1 (0 minutes, 0 seconds)"

          Citation : Pas de titre

          Contenu du fichier main.h :


          Probablement inutile tant que le programme ne se compose que d'une seule unité de compilation (ici, main.c).

          Citation : Pas de titre


          (D'ailleurs j'aimerais aussi savoir pourquoi dans son tuto de M@teo21 ne fais jamais de main.h plz)


          A quoi ça pourrait bien servir ?
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            27 juin 2007 à 15:02:34

            Ok merci :)
            Dsl pour l'erreur bête de prinf à la place de printf.
            Sinon je fais un main.h parsque dans le tuto mateo conseil d'utiliser au maximum des headers pour s'entraîner.

            Maintenant ca marche mais j'ai toujours un probleme. Lorsque je veux entrer un nom composé lors du scanf (comme "Le Dupont" par ex), le programme ne s'execute pas correctement. Il me demande le prenom 2 et le nom 2 d'un coup, alors qu'avec un nom non composé ca marche normal
            • Partager sur Facebook
            • Partager sur Twitter
              27 juin 2007 à 15:38:38

              Citation : Willbeen

              Ok merci :)
              Dsl pour l'erreur bête de prinf à la place de printf.
              Sinon je fais un main.h parsque dans le tuto mateo conseil d'utiliser au maximum des headers pour s'entraîner.

              Maintenant ca marche mais j'ai toujours un probleme. Lorsque je veux entrer un nom composé lors du scanf (comme "Le Dupont" par ex), le programme ne s'execute pas correctement. Il me demande le prenom 2 et le nom 2 d'un coup, alors qu'avec un nom non composé ca marche normal


              scanf() n'est pas adapté. Las gestion des saisies en C, c'est un vrai problème :

              http://www.siteduzero.com/tuto-3-11181-1-realiser-des-saisies-securisees-grace-a-fgets.html
              http://mapage.noos.fr/emdel/inputs.htm

              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                27 juin 2007 à 21:56:34

                Citation : PianoPâriss

                Citation : -ed-

                Argh ! Les tutoriaux des Zéros ont disparu !



                ? http://www.siteduzero.com/tuto-3-10791-1-utiliser-les-bonnes-fonctions-d-entree.html#ss_part_2


                Ah, OK. C'est le numéro du lien qui a changé (suite au backup, je suppose...)
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !

                Plusieurs problemes

                × 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