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 :

PB avec scanf


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 7
    Points : 6
    Points
    6
    Par défaut [RESOLU] PB avec scanf
    Bonjour,

    je débute en C, ma syntaxe reste encore proche du pascal avec lequel je programme aisement.
    Ce prog sert a calculer une moyenne de n notes.

    Le programme se déroule correctement sauf la boucle do-while qui à pour condition d'arret : la variable SUITE doit prende une valeur differente de 'o'. Le scanf ne demande meme pas la valeur de suite bizzarement.

    enfin voila le prog.

    je vous remercie pour l'aide que vous pourrez m'apporter.
    SP.


    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
     
    #include <stdio.h>
    #define y 0 /*y o pas d'utilisation dans le prog...*/
     
    /* Calculateur de moyenne ayant n notes*/
     
    void main(void)
     {
     
    	float NOTE1;
    	float NOTE2;
    	float SOMME;
    	float MOY;
    	int MAXI = 100;
    	char NOM[MAXI];
    	int CONT;
    	char SUITE;
     
     
      	CONT=0;
    	NOTE2=0;
    	NOTE1=0;
     
     
    	puts("Entrez le nom de l'eleve : ");
    	gets(NOM);
     
     
    	do
    		{
     
    		puts ("veuillez entrer la note : ");
    		scanf("%f",&NOTE1);
     
     
    		NOTE2 = (NOTE1 + NOTE2);
     
    		CONT = (CONT + 1 );
     
    		/* A partir d'ici un pb : la lecture de SUITE ne se fait pas !*/
    		puts("Voulez vous continuer O/N");
    		scanf("%c",&SUITE);
     
    		printf("suite %c\n",SUITE);
     
     
    		} while (SUITE=='o');
     
    	MOY=(NOTE2 / CONT);
    	puts(NOM);
    	printf("moyenne %f\n",MOY );
     
     
     }

  2. #2
    Membre expérimenté
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Points : 1 428
    Points
    1 428
    Par défaut
    Bonjour,

    Ta reponse est dans le poste suivant :
    http://www.developpez.net/forums/viewtopic.php?t=108510

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 7
    Points : 6
    Points
    6
    Par défaut merci beaucoup
    Merci beaucoup NYAL ton diagnostique m'a été d'un grand secours.

    grace à la ligne :
    J'ai résolu le problême.
    merci encore.
    SP

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 135
    Points : 146
    Points
    146
    Par défaut
    Comme tu commences à programmer en C, je te conseillerai d'adopter la syntaxe suivante

    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
    /* instructions préprocesseurs */
    #include ...
    #include ...
     
    int main() /* avec ca tu compiles sans problème avec gcc, borland c++ compiler, ... */
    {
    /* declaration et initialisation des variables */
    int a, b, c;
    a = 2;
    b = 3;
    c = 2;
     
    /* programme avec eventuellement sous programmes */
    ...
     
    return 0; /* dans ce cas le programme se termine correctement */
    }
    (avec gcc quand tu mets void main(void) ca retourne un warning >> warning: return type of `main' is not `int')

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    N'importe quoi ce fflush(stdin) !

    edit : fflush() n'est défini que sur les flux de sorties d'où l'aberration qu'est fflush(stdin) ;

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 89
    Points : 69
    Points
    69
    Par défaut
    padawan a dit

    N'importe quoi ce fflush(stdin) !

    edit : fflush() n'est défini que sur les flux de sorties d'où l'aberration qu'est fflush(stdin) ;
    detrompes toi pawadan fflush(stdin) ça existe la fonction fflush sert à vider un tampon attribué a un fichier: stdin c'est le descripteur de l'entre standard qui est aussi un descripteur de fichier. ça peut être le scanner(ex: les terminaux des caisse enregistreuse des supermarchés) , les lasers ... mais le plus connu c'est le clavier d'ordinateur.lorsque tu ouvres un fichier tu dois réserver un tampon qui va recevoir les octets que tu vas lire ou ecrire, pour vider le tempon on fait fflush(fd); fd étant le descripteur de ton fichier, tu peux même le faire pour un fichier texte ou n'importe quel autre.
    donc scanf lit dans un fichier d'entrée standard ou plutôt dans son tempon et certaines fonctions de lecture ont une facheuse manie de ne pas vider le tempon après la lecture donc lors que scanf va lire pour la deuxieme fois il ne va pas permetre à l'utilisateur de saisir les caractères car il considerera que la saisi est déja là donc on lit deux foix la même chose.
    la logique de l'histoire : scanf bloque et attend la saisi quand il n y a rien dans le tempon de l'entrée standard.

  7. #7
    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 : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    La remarque de padawan est en partie justifiee.
    En effet le comportement de fflush n'est defini que sur les tampon de sortie, pas sur ceux en entree. Ainsi le comportement de fflush(stdin) n'est pas normalise, en effet sur certains compilateurs le resultat est bien de vider le tampon, mais sur d'autres ca ne fonctionnera pas. C'est pourquoi il n'est pas recommander d'utiliser fflush sur stdin (ni sur aucun flux d'entree). Maintenant si ca fonctionne sur le compilateur que tu utilises et que tu es certains que ton programme ne sera jamais compile ailleurs, pourquoi pas.

    Citation Envoyé par Borland C++ 5.0 Programmer's Guide
    Syntax

    #include <stdio.h>
    int fflush(FILE *stream);

    Description

    Flushes a stream.
    If the given stream has buffered output fflush writes the output for stream to the associated file.
    The stream remains open after fflush has executed. fflush has no effect on an unbuffered stream.

    Return Value

    fflush returns 0 on success. It returns EOF if any errors were detected.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec scanf("%s",str)
    Par mathieumadrid dans le forum C
    Réponses: 4
    Dernier message: 18/12/2006, 16h47
  2. problème avec scanf
    Par mimina dans le forum C
    Réponses: 27
    Dernier message: 13/11/2006, 19h30
  3. problème avec scanf
    Par thierry_b dans le forum C
    Réponses: 10
    Dernier message: 21/12/2005, 20h10
  4. problème avec scanf
    Par troumad dans le forum C
    Réponses: 30
    Dernier message: 20/11/2005, 15h21
  5. [debutant] pb avec scanf et printf
    Par Andrey dans le forum C
    Réponses: 12
    Dernier message: 17/11/2005, 17h15

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