Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 57 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

test de la validité d'un caractere

 
n°14918
pimousse92
Profil : Jeune recrue
Posté le 10-10-2005 à 23:27:26  profilanswer
 

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",&notes[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;
 
}


Aller à :
Ajouter une réponse