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 :

Aide sur la fonction scanf


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2016
    Messages : 1
    Par défaut Aide sur la fonction scanf
    Bonjour,

    Nouveau Codeur en C , je viens ici pour demander de l'aide à propos d'une la fonction scanf.

    Prenons le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int main () 
    { 
     int age; 
     printf("Quel est votre age ?"); 
     scanf("%d",&age); 
     printf("Votre age est : %d ", age); 
     
     return 0; 
    }
    Si l'utilisateur tape 20, alors il aura ecrit : Votre age est 20.
    Jusque la tout est nickel. Mais prenons maintenant un caractere:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main () 
    { 
     char* nom; 
     printf("Quel est votre age ?"); 
     scanf("%s",&nom); 
     printf("vous etes %s", nom); 
     
     return 0; 
    }
    Je tape Arthur, il y aura ecrit "vous etes Arthur".

    Ce que je voudrais faire c'est oter le faait de devoir appuyer sur "entrer" une fois le nom écrit correctement.

    J'ai pensé à une piste mais je ne sais si elle est bonne ou pas :
    -limiter le nombre de caractères lus par scanf et dès que ce nombre est atteint, sortir du scanf.


    Salutations,
    Merci d'avance

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Faire cela nécessite de modifier la manière dont le terminal interprète les entrées utilisateur (même si tu réalises la lecture caractère par caractère, l'utilisateur devra valider chaque caractère avec la touche entrée), à savoir pour un terminal POSIX : désactiver le mode canonique. Ce n'est évidemment pas portable et je ne sais pas quel est l'équivalent Windows.

    Ce sujet t'apportera plus d'informations.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut
    Et penses aux balises code pour poster un code, c'est le # dans l'éditeur.

    EDIT by @dinobogan : fait
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Au passage, ce code est mauvais et son comportement est en fait indéterminé:
    Citation Envoyé par Onelord0000 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main () 
    { 
     char* nom; 
     printf("Quel est votre age ?"); 
     scanf("%s",&nom); 
     printf("vous etes %s", nom); 
     
     return 0; 
    }
    La fonction scanf() n'alloue pas de chaîne. On n'a pas le choix, il faut lui passer un buffer valide. Et limiter la taille de la saisie.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Hello,

    Citation Envoyé par Onelord0000 Voir le message
    Ce que je voudrais faire c'est oter le faait de devoir appuyer sur "entrer" une fois le nom écrit correctement.
    Comment le programme sait-il que le nom est écrit correctement ? Que l'utilisateur s'appelle Arthur et pas Arthurette ?

    Si tu veux limiter le nombre de caractère saisissable par l'utilisateur, tu dois les lire un par un, et faire un traitement à chaque caractère lu.
    Si tu veux limiter le nombre de caractère géré par ton programme, par exemple pour qu'il n'en gère jamais plus que 7, alors je te conseille de lire cette page : http://emmanuel-delahaye.developpez....ees-solides-c/
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

Discussions similaires

  1. aide sur les fonctions (débutant)
    Par tregont dans le forum Débuter
    Réponses: 4
    Dernier message: 22/01/2006, 21h03
  2. Où trouver l'aide sur les fonctions de l'API Windows ?
    Par psidonio dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 08/11/2005, 14h28
  3. [CR]Aide sur les fonction de date et plage de date.
    Par Job dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 08/11/2005, 09h19
  4. Besoin d'aide sur une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/08/2005, 17h40
  5. Besoin d'aide sur les fonction d'interbase
    Par BOUBOU81 dans le forum InterBase
    Réponses: 2
    Dernier message: 05/11/2004, 10h00

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