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 :

Fonction gets() en C


Sujet :

C

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Février 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 1
    Par défaut Fonction gets() en C
    Bonjour,
    Voici le code C suivant :

    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
    #include <stdio.h>
    #include <conio.h>
    #define n 5
        int i;
        typedef struct 
        {int f;
        char a[10];
        }bb;
     
         bb c[n];
     
           main()
       {
          for (i=0;i<n;i++)
           {
           scanf("%d",&c[i].f);
           gets(c[i].a);
           }
     
        getch();
    }
    Mon problème c'est que la fonction gets(c[i].a) ne s'exécute jamais, j'arrive pas à savoir pourquoi ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Citation Envoyé par ltfi_amiar Voir le message
    Mon problème c'est que la fonction gets(c[i].a) ne s'exécute jamais, j'arrive pas à savoir pourquoi ?
    Tant mieux. Il ne faut pas utiliser la fonction gets(), depuis plus de 25 ans il existe des recommandations préconisant de ne pas l'utiliser, elle est désormais interdite (depuis 2011, il était temps); On peut utiliser fgets() ou gets_s() à la place.
    Maintenant qu'est-ce qui te fait dire qu'elle ne s'exécute pas? Quelle est la saisie et qu'y a-t-il dans c[i].a après la saisie?
    Par exemple si tu saisis 1234 suivi d'un retour chariot il n'y aura rien dans c[0].a et 1234 dans c[0].f. Si ta saisie fait plus de 9 caractères tout est possible et rien n'est prévisible car gets() peut faire n'importe quoi dans ce cas.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 828
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 828
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Déjà commence par écrire un code propre, au minimum indenté correctement. Et si tu pouvais donner des noms un peu plus intelligent que "bb" et "c" à tes types et variables, peut-être que tu t'en sortirais mieux (en tout cas nous on le lirait mieux).

    Ensuite, pour pouvoir dire qu'une instruction s'exécute ou pas, il faut demander à afficher le résultat de l'instruction et là on peut se rendre compte de ce qui se passe.
    Pour ton information, le gets() s'exécute parfaitement. Toutefois étant donné que le clavier contient toujours le <return> que tu as tapé au scanf() du dessus (parce que le scanf("%d") il a récupéré le nombre mais il a laissé tout ce qui n'était pas nombre donc y compris le <return> tapé pour valider ta saisie) le gets() récupère ce <return>.

    Donc contrairement à tes affirmations, il "s'exécute" parfaitement. Mais s'il ne s'exécute pas de la façon que tu souhaiterais, c'est parce que tu n'as pas réfléchi à ce qui se passe et donc que tu n'as pas codé comme il aurait fallu.

    Et sinon comme on te l'a dit, gets() est devenue interdite. Ton compilateur aurait dû te le dire (probablement l'a-t-il fait d'ailleurs mais tout aussi probablement t'as pas lu ce qu'il te disait).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/03/2007, 02h13
  2. fonction get http ?
    Par Juho06 dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/03/2007, 20h11
  3. HashMap et la fonction get
    Par myspirou dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 09/03/2007, 00h57
  4. pourquoi mettre en inline une fonction get.. ?
    Par superC dans le forum C++
    Réponses: 4
    Dernier message: 25/02/2007, 19h35
  5. Fonction Get() renvoyant les mauvaises valeurs
    Par jairbubbles dans le forum XML
    Réponses: 1
    Dernier message: 20/11/2006, 12h33

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