Problem: printf/scanf

Résolu/Fermé
asstel Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 14 décembre 2014 - 26 mars 2014 à 21:53
asstel Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 14 décembre 2014 - 29 mars 2014 à 00:04
bonsoir tout le monde,
j'ai un problem en C
esq qelq1 a une idée pour le resourdre
j'ai un code en C plein de printf et scanf
au niveau d'execution le programme n'attend pas l'utilisateur pour saisir une information
il affiche directement le printf suivant

que dois-je faire??

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
26 mars 2014 à 23:22
Bonjour,

Généralement, il vaut mieux donner son code pour obtenir une réponse...
Pour le coup, je pense savoir d'où vient le problème.
Mets un getchar(); après chacun de tes scanf(). Cela devrait résoudre le problème.
Sinon, poste ton code (avec les getchar()) entre deux balises "code" (liste déroulante située à droite du bouton "souligné").

Cdlt,
0
asstel Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 14 décembre 2014
26 mars 2014 à 23:29
j'ai fait un getchar(); deja mais le programme devient moche un peu :3
des fois l'utilisateur doit cliquer sur entré des fois nn je trouve ça genant un peu pour lui nn!
je cherche une autre solution s'il existe pour la remplacer

merciiiiii vraiment pour votre aide
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 26/03/2014 à 23:30
Je remets ce que j'ai dit :
Généralement, il vaut mieux donner son code pour obtenir une réponse...
Sinon, poste ton code (avec les getchar()) entre deux balises "code" (liste déroulante située à droite du bouton "souligné").


Sans ça, on ne peut pas deviner...
0
asstel Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 14 décembre 2014
27 mars 2014 à 13:07
voici le code avec getchar() :
#include <stdio.h>
#include <stdlib.h>

//ajouter un etudiant
typedef struct Etud Etud;
struct Etud
{
char mat[15];
char nom[50];
char prenom[50];
int nbr_livre;
};

void Ajout_Etudiant()
{
int i;
FILE* f=NULL;
Etud Etudiant;
f=fopen("FMembre.txt","a+");

do{

//lire un etudiant
printf("MATRICULE : ");
gets(Etudiant.mat);
getchar();

printf("NOM : ");
gets(Etudiant.nom);
getchar();

printf("PRENOM : ");
gets(Etudiant.prenom);
getchar();

printf("nombre de livres empruntes par l'etudiant:\n");
printf("Le nombre doit etre comprit entre 0 et 3\n");
do{
scanf("%d",&Etudiant.nbr_livre);
getchar();
}while(Etudiant.nbr_livre<0 || Etudiant.nbr_livre>3);
//Ecrire dans le fichier
fprintf(f,"%s\n%s\n%s\n%d\n",Etudiant.mat,Etudiant.nom,Etudiant.prenom,Etudiant.nbr_livre);
printf("Voulez-vous continuer!\noui: tappez 1\tnon: tappez autre nombre\n");
scanf("%d",&i);
getchar();
}while(i==1);
fclose(f);

};


int main()
{
Ajout_Etudiant();
return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
27 mars 2014 à 22:32
Tu n'as pas tenu compte de toutes mes remarques :
entre deux balises "code" (liste déroulante située à droite du bouton "souligné").
Sinon c'est illisible.

Pour ton code, enlève les getchar() après les gets() et ça devrait être mieux.
Pour info, gets() est à bannir. Il faut utiliser fgets() à la place : http://manpagesfr.free.fr/man/man3/gets.3.html
0
asstel Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 14 décembre 2014
27 mars 2014 à 22:37
j'ai pas compris liste déroulante et les balises j'ai pas compris qsq vous avez dit c pour ça
mais si j'enlève le getchar() le program pass au 2 printf sans lire linformation
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 27/03/2014 à 22:51
Ok, alors la prochaine fois, tu mets ton code entre 2 balises "code" :
<code c>mettre ton code ici</code c>.
Ainsi, le code sera plus lisible.
Pour le getchar(), je suis septique. As-tu bien enlevé comme j'ai dit le getchar() seulement et uniquement après les gets() ? Si oui, reposte ton code.
0
asstel Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 14 décembre 2014
27 mars 2014 à 23:20
j'ai fais les balises mais qand je l ai prévisualiser ça change rien
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
27 mars 2014 à 23:31
Ok... Poste ton code quand même...
0
asstel Messages postés 51 Date d'inscription vendredi 21 mars 2014 Statut Membre Dernière intervention 14 décembre 2014
27 mars 2014 à 23:52
#include <stdio.h>
#include <stdlib.h>

//ajouter un etudiant
typedef struct Etud Etud;
struct Etud
{
    char mat[15];
    char nom[50];
    char prenom[50];
    int nbr_livre;
};

void Ajout_Etudiant()
{
    int i;
    FILE* f=NULL;
    Etud Etudiant;
    f=fopen("FMembre.txt","a+");

    do{

    //lire un etudiant
    printf("MATRICULE  : ");
    gets(Etudiant.mat);
    //getchar();

    printf("NOM        : ");
    gets(Etudiant.nom);
   // getchar();

    printf("PRENOM     : ");
    gets(Etudiant.prenom);
    //getchar();

    printf("nombre de livres empruntes par l'etudiant:\n");
    printf("Le nombre doit etre comprit entre 0 et 3\n");
    do{
    scanf("%d",&Etudiant.nbr_livre);
    getchar();
        }while(Etudiant.nbr_livre<0 || Etudiant.nbr_livre>3);
    //Ecrire dans le fichier
    fprintf(f,"%s\n%s\n%s\n%d\n",Etudiant.mat,Etudiant.nom,Etudiant.prenom,Etudiant.nbr_livre);
    printf("Voulez-vous continuer!\noui: tappez 1\tnon: tappez autre nombre\n");
    scanf("%d",&i);
    getchar();
     }while(i==1);
    fclose(f);

};


int main()
{
    Ajout_Etudiant();
    return 0;
}

0