Bonjour, le probleme suivant n'en ai pas un dans l'absolu puisque j'ai des alternatives, cependant j'aimerais arriver à faire ce que j'avais initialement prévu :
do //test si l'on a bien saisit un 'o' ou un 'n'
{
printf("Voulez-vous arreter la saisie ? (saisir 'o' ou 'n') " );//affichage question
fflush(stdin);
scanf("%c",&rep); //saisie reponse
//printf("drapeau" );//inutile au prog final
}
while(rep!='o'&&rep!='n');
PB : LA QUESTION ("Voulez-vous arreter la saisie ?" ) EST POSEE 2 FOIS, POURQUOI ?
idees de reponses : le fflush ? on ne teste pas un caractere ainsi ?
Il faut savoir que lorsque l'on remplace les caracteres "rep" par une chaine de caractere "rep[0]", la question n'est posée qu'une fois comme voulu.
LE PROG DANS SON INTEGRALITE, ça sert à calculer des moyennes de notes (exo cours):
#include <stdio.h>
#include <stdlib.h>
//constantes:
#define NB_NOTES_MAX 100
#define NB_ELEVES_MAX 100
int main(int argc, char *argv[])
{
//variables :
int n; //designe le n-ième élève
int m; //curseur pour designer l'eleve n-1
int i; //curseur pour designer la note i de l'élève n-1
float notes[NB_ELEVES_MAX][NB_NOTES_MAX];//matrice regroupant les notes de chaque élève
float cumul; //somme des notes (pour un élève)
int nb_notes;
int nb_eleves;
char rep;
//demande, saisie, affichage du nombre d'élèves :
printf("nombre d eleves :" );
scanf("%u",&nb_eleves);
printf("vous avez %u eleves\n\n",nb_eleves);
//saisie des notes des n élèves
for(m=0;m<nb_eleves;m++)
{
n=m+1;
cumul=0; //somme des notes raz
//saisie des notes de l'élève n
for (i=1;i<=NB_NOTES_MAX;i++)
{
//pose la question après la saisie d'une note
if(i!=1) //pose la question après la saisie d'une note
{
printf("Voulez-vous arreter la saisie ? (saisir 'o' ou 'n') " );//affichage question
do //test si l'on a bien saisit un 'o' ou un 'n'
{
fflush(stdin);
scanf("%c",&rep); //saisie reponse
//printf("drapeau" ); //essayez avec ce drapeau vous serez peut-etre surpris,
//en cherchant à resoudre ce problème
//j'ai compris la complexité de l'utilisation des caracteres
//j'avais d'autres alternatives comme utiliser une chaine de caractere au lieu d'un caractere, ça fonctionne !
}
while(rep!='o'&&rep!='n');
}
//fin if
//l'utilisateur a saisit au moins une note et veux arreter
if(i!=1&&rep!='n'){nb_notes=i-1;i=NB_NOTES_MAX;}
//sinon saisie de la note i de l'élève n
else
{
printf("saisir note %u de l eleve %u: ",i,n);
scanf("%f",¬es[m][i]);
cumul=cumul+notes[m][i]; //calcul de la nouvelle somme des i notes de l'élève n
}
} //fin du cycle de saisie des i notes de l'élève n
//calcul de la moyenne des i notes de l'élève n
notes[m][0]=cumul/nb_notes;
printf("\n" ); //saut de ligne après saisie des notes d'un élève
} //fin du cycle de saisie des notes des n élèves
// affichage des moyennes
printf("Les moyennes sont :\n" );
for (m=0;m<nb_eleves;m++)
{
n=m+1;
printf("eleve %u m = %.2f\n",n,notes[m][0]);
}
system("PAUSE" );
return 0;
}