IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Code qui n'affiche absolument rien..


Sujet :

C

  1. #21
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Heu je ne sais pas si ca va faire avancer le smilibilik mais Melle declare sa fonction choisir_mot avec en parametre un pointeur vers un tableau de caractere mais dans dans le main elle l'appelle pas en pointeur et dans cette meme fonction je crois qu'elle le rempli 'a l'arrache' ?




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...  
    if(!choisir_mot(mot_secret))
    {
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    .....
          fgets(mot_choisi, 100, dico);
          mot_choisi[strlen(mot_choisi) - 1] = '\0';
          fclose(dico);
          return 1;
    }
    De plus dans le if du main ne serait-il pas plus judicieux de faire un test sur la valeur du int retourné ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ....
    if(choisir_mot(mot_secret) == 0)
    {
    ...
    Encore une autre piste a suivre : tu est bien sure que ta fonction est bien declarée dans le code de ton main, essayes en mettant tout sur un seul fichier .c (pour voir)

  2. #22
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    Citation Envoyé par myself789
    Ça affiche Choix d'un mot... et après rien, pas d'erreur, pas de pause, pas de fermeture de programme... absolument rien, noir total!!!
    Citation Envoyé par myself789
    Meme pas... il ferme sans dire un mot
    Te moquerais-tu ?

    SnakemaN : Je ne vois pas de problème de ce coté là : La fonction reçoit un pointeur valide vers un buffer automatique de 100 caractères...

  3. #23
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Snakeman tu viens d'me mêler la lollll....

    Médinoc non je te niaise pas

  4. #24
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Non c rien myself c'est juste que je n'aurai pas fait comme ca...

    Ce que je voulais dire Médi c'est oui la fonction recoit un pointeur mais est-ce il est bien utilisé en tant que tel par la suite ? (ca fait longtemps le C pour moi...)

  5. #25
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    Alors ? C'est un cas ou l'autre : Lequel est-ce ?

    Snakeman : Ben oui, c'est utilisé en tant que buffer de 100 caractères.
    Moi, j'apporterais bien comme amélioration de passer la taille en paramètre.

    Et aussi, je vérifierais que le strlen() a retourné une valeur strictement supérieure à zéro...

  6. #26
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut
    Voici quelques commentaires :

    dico.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #include "dico.h" 
     
    int choisir_mot(char *mot_choisi)
    {
        FILE* dico = NULL;
     
        long nb_mots = 0, num_mot = 0;
        int caractere; /* ca ne sert a rien d'initialiser caractere ici */
     
        dico = fopen("dico.txt", "r");
     
     
        if(dico == NULL)
        {
           return 0;
        }
        do
        {
           /* tu peux verifier aussi que tu as bien lu un caractere en testant 
               caractere == NULL */       
           caractere = fgetc(dico);
           if (caractere == '\n')
           {
             nb_mots++;
           }
        } while(caractere != EOF);
     
          num_mot = nombre_aleatoire(nb_mots);
     
          /* ton while te permet de relire toujours le même mot a cause du rewind
          est ce bien ce que tu veux? */
          while(num_mot > 0)
          {
             rewind(dico);
             caractere = fgetc(dico);
             if(caractere == '\n')
             {
               num_mot--;
             }
          }
     
          /* tu stocke une partie du dico dans mot_choisi */
          fgets(mot_choisi, 99, dico); /* un '\0' est placé a la fin, donc 99 */
          mot_choisi[strlen(mot_choisi) - 1] = '\0';
          fclose(dico);
          return 1;
    }
     
    long nombre_aleatoire(long max)
    {
         srand(time(NULL));
         return(rand() % max);   
    }
    EDIT: modification du code

  7. #27
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    1. Tu as conservé le exit() après mes efforts pour le faire supprimer.
    2. mot_choisi[strlen(mot_choisi) - 1] = '\0'; servait à supprimer le \n, pas à forcer la terminaison de la chaîne...
      (bien entendu, ça ne marche que pour une ligne de moins de 100 caractères, mais comme chaque ligne est supposée être un mot...)

  8. #28
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par Médinoc
    1. Tu as conservé le exit() après mes efforts pour le faire supprimer.
    2. mot_choisi[strlen(mot_choisi) - 1] = '\0'; servait à supprimer le \n, pas à forcer la terminaison de la chaîne...
      (bien entendu, ça ne marche que pour une ligne de moins de 100 caractères, mais comme chaque ligne est supposée être un mot...)

    1. Effectivement, j'avais zappé ce message. Dans ce cas, remplacer par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(dico == NULL)
        {
          return 0;
        }
    2. En effet, dans ce cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fgets(mot_choisi, 99, dico); /* un '\0' est placé a la fin, donc 99 */
    mot_choisi[strlen(mot_choisi)] = '\0';
    Il ne faut pas de strlen - 1, car :

    DESCRIPTION
    The strlen() function calculates the length of the string s, not
    including the terminating ‘\0’ character.
    Enfin, si je ne m'abuse

  9. #29
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 581
    Points
    41 581
    Par défaut
    Ben si, strlen()-1, sinon c'est sur le zéro que tu tapes.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char test[4]="abc";
    assert(test[0]=='a');
    assert(test[1]=='b');
    assert(test[2]=='c');
    assert(test[3]=='\0');
    assert(strlen(test)==3);

  10. #30
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par Médinoc
    Ben si, strlen()-1, sinon c'est sur le zéro que tu tapes.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char test[4]="abc";
    assert(test[0]=='a');
    assert(test[1]=='b');
    assert(test[2]=='c');
    assert(test[3]=='\0');
    assert(strlen(test)==3);
    C'est dur le matin

    En effet, il faut bien le -1; je rectifie

Discussions similaires

  1. Treeview n'affiche absolument rien
    Par knuj0 dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 20/02/2010, 11h02
  2. Réponses: 1
    Dernier message: 29/04/2007, 18h44
  3. SplashScreen qui n'affiche rien ?
    Par Baptiste Wicht dans le forum Interfaces Graphiques en Java
    Réponses: 14
    Dernier message: 26/06/2006, 14h15
  4. [EasyPHP] code php qui s'affiche
    Par moonia dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 11/04/2006, 11h01
  5. [LG]Programme qui n'affiche rien
    Par ousunas dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2004, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo