Bloqué dans programme

juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 - 21 févr. 2008 à 15:47
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 - 21 févr. 2008 à 22:08
bonjour !!!

est ce que vous pourriez m'aider, je n'arrive pas a ressoudre un probleme. je veux taper des noms d'eleve avec leur points (ok)et je veux m'arreter quand la question ("entrez cote d'un eleve?(o/n) ")arrive et que je tape 'n' mais cela ne marche pas

merci d'avance(desole je c pas comment mettre le code dans une casse code)

code:

#include

<conio.h>
#include<stdio.h>
#include<string.h>void

main()
{

int i=0,j;

char NOMS[10][25],rep;

double COTES[10][5];

//Saisie des Notes au clavier

do
{
printf(
"entrez cote d'un eleve?(o/n) :");
scanf(
"%c", &rep);
printf(
"\n Entrez le nom de l'eleve : ");
scanf(
"%s",NOMS[i]);

for(j=0;j<10;j++)
{
printf(
"\nEntrez la note numero %d : ",j+1);
scanf(
"%lf",&COTES[i][j]);
}
i++;
}

while(rep=
'n');
getch();
}

13 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 févr. 2008 à 15:58
printf(

"entrez cote d'un eleve?(o/n) :"
);
scanf(

"%c"
, &rep);










while
(rep ==

'n'
)



{



   printf(

"\n Entrez le nom de l'eleve : "
);
   scanf(

"%s"
,NOMS[i]);


   for
(j=0;j<10;j++)
   {
      printf(

"\nEntrez la note numero %d : "
,j+1);
 

    

scanf(

"%lf"
,&COTES[i][j]);


  

}


  

i++;


  

printf(

"entrez cote d'un eleve?(o/n) :"
);


  

scanf(

"%c"
, &rep);






}

J'ai un peu changé ton code mais ton problème était ceci


while
(rep=



'n'


);





C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 févr. 2008 à 15:59
Oups pardon, dans mon exemple, remplace
while(rep ==
'n')

par
while(rep !=
'n')

C++ (@++)<!--
0
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 1
21 févr. 2008 à 16:18
tu as verifier

parce que moi sa mets fais toujorus le meme

j'entre le nom les 10 cote et puis il me mets entrez cote d'un eleve(o/n)

mais je n'est pas l'occasion de mettre 'n' parce qu'il passe direct au ntrez le nom de l'eleve direct!!
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 févr. 2008 à 16:28
Oups

printf( "entrez cote d'un eleve?(o/n) :" );
    scanf( "%c" , &rep);

    while (rep != 'n')
    {
       printf( "\n Entrez le nom de l'eleve : " );
       scanf( "%s" ,NOMS[i]);
       for (j=0;j<10;j++)
       {
          printf( "\nEntrez la note numero %d : " ,j+1);
           scanf( "%lf" ,&COTES[i][j]);
       }
       i++;

       fflush(stdin);
       printf( "entrez cote d'un eleve?(o/n) :" );
       scanf( "%c" , &rep);
    }

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 1
21 févr. 2008 à 16:30
en faite voila mon programme en entier je ne sais pas si c sa qui fais bugger

<hr />#include

<conio.h>
#include<stdio.h>
#include<string.h>void

main()
{

int i=0,j,n;

char NOMS[10][25],tmp[25],nom[25],rep;

double COTES[10][5];

//Saisie des Notes au clavier

while(rep!=
'n')
{
printf(
"entrez cote d'un eleve?(o/n) :");
scanf(
"%c",&rep);
printf(
"\n Entrez le nom de l'eleve : ");
scanf(
"%s",NOMS[i]);

for(j=0;j<10;j++)
{
printf(
"\nEntrez la note numero %d : ",j+1);
scanf(
"%lf",&COTES[i][j]);
}
i++;
}

//Affichage des résultatsclrscr();
printf(

"\n NOM COTE1 COTE2 COTE3 COTE4 COTE5 COTE6 COTE7 COTE8 COTE9 COTE10");

for(i=0; i<10; i++)
{
printf(
"\n%-10s",NOMS[i]);

for(j=0; j<10; j++)
{
printf(
"%6.1lf ",COTES[i][j]);
}}
getch();

}

<hr />
donc ma proramme je veux
 
Entrer les noms et 10 notes  par 6 classes(pas encore fais) d'un nombre indéterminé d'élèves. Les notes seront comprises entre 0 et 20 (à vérifier)(pas encore fais). Les noms et les notes seront stockées dans des tableaux à deux dimensions.
Afficher ensuite les noms des étudiants ainsi que la note de chacun.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 févr. 2008 à 16:38
char
NOMS[10][25],tmp[25],nom[25],rep;



...
while
(rep!=

'n'
)

Très fortement déconseillé. rep n'est pas initialisé au premier tour de boucle. Il se pourrait bien que rep val 'n' sans même avoir commencé.


while
(rep!=

'n'
)
{
printf(



"entrez cote d'un eleve?(o/n) :"
);
scanf(

"%c"




,&rep);


printf(

"\n Entrez le nom de l'eleve : "
);
scanf(

"%s"
,NOMS[i]);

for
(j =0;j<10;j++)
{
printf(

"\nEntrez la note numero %d : "
,j+1);
scanf(

"%lf"
,&COTES[i][j]);
}
i++;
}

Si tu réponds non là, tu devrais, quand même, entrer d'autre valeurs, car il ne sortira qu'au prochain tour.

Je te conseille vivement de prendre mon précédent exemple.




C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 févr. 2008 à 16:44
Oh et en passent, ton tableau de double devra être déclaré comme ceci:

double COTES[10][10];

Pour chacun des 10 élèves, on entre 10 nots.

C++ (@++)<!--
0
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 1
21 févr. 2008 à 19:07
ouais ok merci voila le programme marche jusqu'a là!!!!

mais maintenant je veux r'ajouter une condition pour dire que les cotes rentrés doivent etre entre 0et20

donc je mets

printf( "\nEntrez la note numero %d : " ,j+1);
scanf( "%lf" ,&COTES[i][j]);
if(COTES[i][j]<0 ||COTES[i][j]>20)
{
j--;
}

est ce que sa va bien prendre que le cotes entre 0et20??(je veux que l'on tape la cote et que si c 40par exemple ben que l'on ecrase (en quelque sorte)avec la nouvelle valeur.????
0
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 1
21 févr. 2008 à 19:20
et tant que j'y suis pour que les noms et cote soit dans 6 classes(donc faut que dans classe un il y est julien manu...classe deux henri pierre

donc je fais

une boucle pour que l'utilisateur tape les noms et cotes!!!

printf("entrez les eleves de la classe %d",m+1);
.....

et une boucle pour afficher

et là aussi je remets a peut pres le meme

printf("eleves de la classe %m",m+1);
.......

tout simplement ou je reve !!!
0
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 1
21 févr. 2008 à 20:11
#include<conio.h>
#include<stdio.h>
#include<string.h>


void main()
{
 int i=0,j,n,tour=0,x;
   char NOMS[20][10],rep;
   double COTES[20][10];


   //Saisie des Notes au clavier




   while(rep!='n')


   {


    printf("\n Entrez le nom de l'eleve : ");
      scanf("%s",NOMS[i]);


    for(j=0;j<10;j++)
      {
       printf("\nEntrez la note numero %d : ",j+1);
         scanf("%lf",&COTES[i][j]);
   if(COTES[i][j]<0 ||COTES[i][j]>20)
   {
   j--;
   }
      }
      i++;
      tour=tour+1;


      fflush(stdin);
      printf("entrez cote d'un eleve?(o/n) :");
      scanf("%c",&rep);
   }


 




   //Affichage des résultats


   clrscr();
   printf("\n NOM       COTE1  COTE2  COTE3  COTE4  COTE5  COTE6  COTE7  COTE8  COTE9  COTE10");
   i=0;
   x=0;
   while(x!=tour)
   {
      printf("\n%-10s",NOMS[i]);
    for(j=0;j<10;j++)
      {
        printf("%6.1lf ",COTES[i][j]);
      }
      i++;
      x++;
   }


   getch();
}

donc voila j'en suis là mais maintenent je dois le faire pour 6classes. mais je vois pas bien comment vous pourriez me donner quelque truc
??
donc faut que je tape pour classe 1 le cote puis classe 2....et puis tout afficher

svp repondez

merci d'avance
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 févr. 2008 à 20:51
Et bien tu pourrais creer des tableaux à 3 dimentions:
char NOMS[6][20][10];
double COTES[6][20][10];

Puis tu utilises une autre boucle qui incrémente une variable indiquant la classe actuelle.

int k;

for(k = 0; k < 6; k++) {
    printf("Classe no %d\n", k);

    do {         printf("\n Entrez le nom de l'eleve : ");
        scanf("%s",NOMS[k][i]);

        for(j=0;j<10;j++)
        {
            printf("\nEntrez la note numero %d : ",j+1);
            scanf("%lf",&COTES[k][i][j]);
            if(COTES[k][i][j]<0 ||COTES[k][i][j]>20)  j--;
        }
        i++;
        tour=tour+1;

        fflush(stdin);
        printf("entrez cote d'un eleve?(o/n) :");
        scanf("%c",&rep);
    } while (rep != 'n');

}

Même principe pour l'affichage.

Tu remarquera que j'ai changer ton while(rep != 'n') {} par un

do{}while(rep! ='n');

C'est TRÈS important. On ne fait pas de test sur une variable non initialisé.

Remarque, on peut aussi très bien remplacer scanf("%c", ...) par getchar().

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 févr. 2008 à 21:59
Voici quelque chose de vite fait mais fonctionnel:

#include <stdio.h>
#include <stdlib.h>

#define MAX_CLASSES 6

void main()
{
    char NOMS[MAX_CLASSES][20][8];
   float COTES[MAX_CLASSES][20][10];
   int tt[10], k, i;

   //Saisie des Notes au clavier

    for(k = 0; k < MAX_CLASSES; k++) {
        printf("Classe no %d\n", k+1);

        i = 0;

        do {
            int j;

            printf("\nEntrez le nom de l'eleve : ");
            fflush(stdin);
            scanf("%7s", NOMS[k][i]);

            for(j=0;j<10;)
            {
                float tmp;

                printf("\nEntrez la note numero %d : ",j+1);
                fflush(stdin);
                scanf("%f",&tmp);
                if(tmp >= 0 && tmp <= 20) {
                    COTES[k][i][j] = tmp;
                    j++;
                }
            }

            i++;

            fflush(stdin);
            printf("entrez cote d'un eleve?(o/n) :");
        } while (getchar() == 'o');

        tt[k] = i;
    }

 

   //Affichage des résultats

    for(k = 0; k < MAX_CLASSES; k++) {
        printf("\n\nClasse no %d", k+1);

       printf("\nNOM\tC1     C2     C3     C4     C5     C6     C7     C8     C9     C10");
       for(i = 0; i < tt[k]; i++) {
           int j;

            printf("\n%s\t",NOMS[k][i]);
            for(j=0;j<10;j++) {
                if(COTES[k][i][j] < 10) putchar('0');
                printf("%.1f   ",COTES[k][i][j]);
            }
       }
    }

    putchar('\n');
   system("pause");
}

C++ (@++)<!--
0
juju0612 Messages postés 19 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 24 août 2008 1
21 févr. 2008 à 22:08
oui merci beaucoup mais comme je vois tu utilise un tableau à 3 dimension

et sa je n'ai pas encore vu

mais merci comme meme
0
Rejoignez-nous