Problem: printf/scanf

Résolu
asstel Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -  
asstel Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention  
 
j'ai fais les balises mais qand je l ai prévisualiser ça change rien
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ok... Poste ton code quand même...
0
asstel Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
#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