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 :

probleme saut de ligne avec scanf


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut probleme saut de ligne avec scanf
    bonjour tous le monde,je suis debutant en c j'ai un probleme de saut de ligne avec la fonction scanf j'arrive pas a le resoudre,si quelqu'un peut m'aider,voila le code.et merci.
    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
    #include <stdio.h>
    #include <conio.h>
     
    main()
    {
          float note1,note2,note3,coefficient,note_finale,note_finale1,note_finale2,note_finale3,moyenne_generale;
          printf("Matiere");
          printf("\t    Note/20");
          printf("\tCoefficient");
          printf("\tNote finale");
          printf("\n\nMath\t    ");
          scanf("%f",&note1);
          printf("\t\t\t");
          printf("2\t\t");
          note_finale1=note1*2;
          printf("%.2f",note_finale1);
          printf("\n\nphysique    ");
          scanf("%f",&note2);
          printf("\t");
          printf("\t\t1\t\t");
          note_finale2=note2;
          printf("%.2f",note_finale2);
          printf("\n\njava\t    ");
          scanf("%f",&note3);
          printf("\t\t\t");
          printf("3\t\t");
          note_finale3=note3*3;
          printf("%.2f",note_finale3);
          note_finale=note_finale1+note_finale2+note_finale3;
          coefficient=6;
          moyenne_generale=note_finale/coefficient;
          printf("\n\nla moyenne generale est : %.2f/20 ",moyenne_generale);
     
     
          getch();
    }

  2. #2
    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
    C'est un problème connu. Il y a un appel particulier à scanf() qui peut nettoyer le buffer clavier après chaque ligne, mais tu peux aussi chercher sur le forum le code d'une fonction qu'on appelle généralement fpurge() ou purge() (qui va avec fclean(), utilisée après la fonction standard fgets()).
    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.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut probleme saut de ligne avec scanf
    Citation Envoyé par Médinoc Voir le message
    C'est un problème connu. Il y a un appel particulier à scanf() qui peut nettoyer le buffer clavier après chaque ligne, mais tu peux aussi chercher sur le forum le code d'une fonction qu'on appelle généralement fpurge() ou purge() (qui va avec fclean(), utilisée après la fonction standard fgets()).
    tout d'abord merci pour votre reponse,enfaite quand j'execute le code je recois sur l'ecran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    matiere             note/20          coefficient         note finale
     
    math                 17                                         
                                                    2                      34
     
    physique           14                                        
                                                    1                      14
     
    java                   15                                         
                                                     3                     45  
     
     
    la moyenne generale est : 15.5/20
    moi par exemple je veux 17 a cote de 2 et 34 a cote de 2 sur la meme ligne 3 et puis la meme chose 14 a cote de 1 et 1 a cote de 14 et enfin 15 a cote de 3..................etc

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 126
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Je crois que la seule solution que je connaisse pour supprimer les sauts de ligne tapées par l'utilisateur pour valider le scanf est d'utiliser une bibliothèque un peu plus évolué pour les programmes en consoles (soit ncurses)

    Ces 2 entrées de la FAQ pourront vous aider (je pense):
    - http://c.developpez.com/faq/?page=cl...ran#CONS_enter
    - http://c.developpez.com/faq/?page=cl...re_sans_entree
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Nouveau candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut
    bonjour, j'ai une solution à votre problème. Au lieu d'utiliser des tabulations, utilisez plutôt les gabarits pour l'affichage des données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    main()
    {
        int coef=2, note=12;
        printf("matiere \t coefficient \t note\n");
        printf("maths %23d %8d \n", coef, note);
        coef=3;
        note=15;
        printf("java %22d %8d \n", coef, note);
        //:  %8d", x);
    }
    ça manque peut-être de style et il faut un peu modifier les valeurs des gabarits à chaque nouvel affichage, mais ça marche.
    de plus je vous conseille d'utiliser un tableau pour recueillir toutes les informations avant de les afficher

    pour plus d'info, consulter la doc sur printf

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par abdelmounaime Voir le message
    moi par exemple je veux 17 a cote de 2 et 34 a cote de 2 sur la meme ligne 3 et puis la meme chose 14 a cote de 1 et 1 a cote de 14 et enfin 15 a cote de 3..................etc
    Ben c'est un bête problème d'affichage. Essaye de découper ton programme en tâches élémentaires qui pourraient être
    - saisie des notes
    - calcul de la moyenne
    - affichage des résultats
    Ca te permettra d'avoir un code plus souple, plus évolutif, plus facilement maintenable.Si une partie ne fonctionne pas, 1) ça ne bloque pas le tout car tu peux très bien la simuler pour tester les autres parties et 2) ça te permet de l'isoler pour la corriger plus facilement.
    Et que feras-tu si tu dois rajouter "Français" ? Tu vas aller recoder des lignes en dur dans ton code ? Cela aurait été tellement plus simple si t'avais créé un truc plus universel utilisant une structure "matière" à laquelle tu aurais passé un tableau de matières. Ainsi pour rajouter "français" ou enlever "java" ben suffit de rajouter ou enlever une simple ligne du tableau...
    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. Saut de ligne avec sed
    Par melmouj dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 11/12/2009, 14h03
  2. probleme saut de ligne en batch
    Par warubi dans le forum Windows XP
    Réponses: 1
    Dernier message: 20/07/2008, 12h29
  3. Pb saut de ligne avec <form></form>
    Par JSuper_Kitten dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/10/2005, 16h02
  4. [FLASH MX] PB de saut de ligne avec XML
    Par yoda_style dans le forum Flash
    Réponses: 2
    Dernier message: 07/04/2005, 11h16
  5. le caractere de saut de ligne avec SetDlgItemText
    Par matthieup dans le forum Windows
    Réponses: 4
    Dernier message: 07/11/2004, 18h31

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