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 :

erreur de programme en C


Sujet :

C

  1. #1
    Vestigo
    Invité(e)
    Par défaut erreur de programme en C
    Bonjour tous le monde, pouvez vous m'aidez à résoudre mon code svp?

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
     
    int main(int argc, char *argv[])
    {
       char villeHabite[200];
     
       printf("Ou habite tu?");
       scanf("%s",villeHabite);
       if(villeHabite==Rennes)
       {
          printf("Ah je connais bien");
       }
       else
       {
          printf("je connais pas");
       }
     
       system("PAUSE");
       return 0;
    }
    Dernière modification par gl ; 02/09/2007 à 18h20.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Vestigo Voir le message
    Bonjour tous le monde, pouvez vous m'aidez à résoudre mon code svp?
    Tu peux le poster sans les numéros de ligne ?

  3. #3
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Salut,

    J'ai corrigé ton code, et je l'ai commenté... Pose des questions si tu ne comprends pas ^^
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(int argc, char *argv[])
    {
        char villeHabite[200];
     
        printf("Ou habite tu ?\n");
        /* Je te conseille plutot d'utiliser fgets pour la saisie de chaine
        de caracteres */
        /* scanf("%s",villeHabite); */
        fgets (villeHabite, sizeof villeHabite, stdin);
        /* Pour fclean, fais une recherche sur le forum, on en a déjà parlé */
        fclean (villeHabite, stdin);
     
        /* La comparaison entre 2 chaines de caractères se fait à l'aide
        de strcmp (ou strncmp) */
        if (strcmp (villeHabite, "Rennes") == 0)
            printf ("Ah je connais bien.\n");
        else
            printf ("Je ne connais pas.\n");
     
        system("PAUSE");
     
        return 0;
    }
    Pense à regarder les prototypes des fonctions que tu ne connais pas..

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Freed0 Voir le message
    Pense à regarder les prototypes des fonctions que tu ne connais pas..
    Sauf que fclean() n'est pas standard...

  5. #5
    Vestigo
    Invité(e)
    Par défaut
    Merci à tous pour vos réponses, et excusez moi pour les numéros de lignes.
    Alors par contre pourquoi dois je utiliser fgets plutot que scanf? Je sais que tous le monde le dit mais qui pourait m'expliquer? Il y'a plein de mots en plus maintenant dans mon code que est ce vraiment nécessaire?

    Merci.

  6. #6
    Vestigo
    Invité(e)
    Par défaut
    Je viens de tester le code mais mon compilateur detecte 2 erreurs; les voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      [Linker error] undefined reference to `fclean'
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ld returned 1 exit status
    Pouvez vous m'aidez?

  7. #7
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut
    Tu n'as pas du inclure le header contenant la fonction fclean. De plus, Emmanuel a dit que ce n'était pas standard

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Vestigo Voir le message
    Merci à tous pour vos réponses, et excusez moi pour les numéros de lignes.
    Tu ne les a toujours pas enlevées...
    Alors par contre pourquoi dois je utiliser fgets plutot que scanf? Je sais que tous le monde le dit mais qui pourait m'expliquer?
    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers
    Il y'a plein de mots en plus maintenant dans mon code que est ce vraiment nécessaire?
    La sécurité a un cout...

  9. #9
    Vestigo
    Invité(e)
    Par défaut
    OK merci, je vais voir ça... Merci pour le lien il à l'air très clair. Et que faut il que je fasse pour les entrées sécuriseé?installation?

  10. #10
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Vestigo Voir le message
    Et que faut il que je fasse pour les entrées sécuriseé?i
    Suivre ce qui est explique dans le lien.
    C'est a dire ne pas faire confiance a l'utilisateur, ne pas utiliser les fonctions ne verifiant pas la taille des entrees (gets(), scanf(), etc.), verifier la validite de la saisie avant de l'utiliser, etc.

  11. #11
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut
    En gros, utiliser fgets, puts...

  12. #12
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Décidemment, ce soir, c'est le lynchage de la fonction scanf()....

    Dire que scanf ne vérifie pas la taille de l'entrée, c'est faux !!!

    Scanf() le fait si le lui demande....

    Celui qui utilise scanf("%s") est suicidaire et joue à la roulette russe.

    Il faut toujours spécifier la taille du buffer à scanf(), eg scanf("%256s"), par exemple...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  13. #13
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par vicenzo Voir le message
    Dire que scanf ne vérifie pas la taille de l'entrée, c'est faux !!!
    Certes, il est possible de verifier la taille de l'entree avec scanf (il est vrai que dans mon message precedent, j'ai fait un raccourci rapide). Mais ce n'est pas aussi simple que peut l'etre l'utilisation de fgets() et tellement souvent mal fait que, personnellement, je preconise plutot d'oublier scanf() et de le remplacer par fgets() pour la saisie de chaine.

  14. #14
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par vicenzo Voir le message
    Décidemment, ce soir, c'est le lynchage de la fonction scanf()....
    Comme d'habitude...
    Dire que scanf ne vérifie pas la taille de l'entrée, c'est faux !!!

    Scanf() le fait si le lui demande....

    Celui qui utilise scanf("%s") est suicidaire et joue à la roulette russe.

    Il faut toujours spécifier la taille du buffer à scanf(), eg scanf("%256s"), par exemple...
    En espérant que celui-ci fasse 257 char (ou plus)... C'est difficile à gérer de façon automatique. Franchement, oublie scanf(), il y a mieux et plus simple.

  15. #15
    Vestigo
    Invité(e)
    Par défaut
    Merci, mais faut il que j'installe quelques chose pour faire marcher le code que l'on m'a donné?? Parce qu'il ne marche mon compilateur détecte des erreurs.

    Merci de m'aider.

  16. #16
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Je ne suis pas accro à scanf, je l'utilise même très rarement voir jamais.

    bien sûr que fgets est de loin plus pratique que scanf dans les exemples cités...

    mais un chat est un chat ...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  17. #17
    Vestigo
    Invité(e)
    Par défaut
    Merci mais ça m'aide pas beaucoup.

  18. #18
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut
    C'est sûr que si tu dis : "ca compile pas " on peut pas t'aider. Envoie nous la sortie du compilateur et ton code !

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Vestigo Voir le message
    Je viens de tester le code mais mon compilateur detecte 2 erreurs; les voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      [Linker error] undefined reference to `fclean'
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ld returned 1 exit status
    Voici un exemple d'implémentation de fclean() :

    http://www.developpez.net/forums/sho...01&postcount=2

  20. #20
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    C'est sûr que si tu dis : "ca compile pas " on peut pas t'aider. Envoie nous la sortie du compilateur et ton code !
    Tout a été dit au-dessus, mais certains on 'parasité' son message... attention à ne pas squatter les discussions...

Discussions similaires

  1. pb de memoire ou erreur de programmation?
    Par nina2007 dans le forum Linux
    Réponses: 14
    Dernier message: 14/08/2007, 07h28
  2. Erreur de programmation d'un DTS
    Par ninsekh dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 13/08/2007, 22h08
  3. erreur de programme
    Par acik59 dans le forum C
    Réponses: 7
    Dernier message: 16/05/2007, 12h40
  4. erreur dans programme java sur des vecteurs 3D
    Par HighSchool2005 dans le forum Langage
    Réponses: 18
    Dernier message: 15/02/2007, 16h38
  5. erreur compilation programme
    Par auxisteff dans le forum C
    Réponses: 8
    Dernier message: 09/02/2007, 21h27

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