Pb programme en language C

Bonjour,
alors voilà je dois créer un programme permettant de saisir un tableau de 0,1,2 uniquement.
Puis de compter les 0et les 1.
Ensuite je dois échanger les 0 et les 1;
Et enfin les recompter.

mon prog est le suivant :

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

// TD2 EXO1 tableau de 0,1 ou 2
void saisie ( int t[20] )
{
int i;
for (i=0 ; i<20 ;i++)
{
do{
printf (" entrez entiers n° %i\n ", i++);
scanf ("%i",&t[i]);
}
while ( t[i]!=1 || t[i]!=0 || t[i]!=2 );
}
}

void affiche ( int t[20] ){
int i;
for (i=0 ; i<20 ;i++)
{
printf ("%i",&t[i]);
printf ("\n");
}
}

float calcul ( int t[20],int chiffre ){
int i;
int v=0;
for (i=0 ; i<20 ;i++)
{
if (t[i]==chiffre)
v++;
}
return v;
}

void permut (int tab[20], int nb1,int nb2)
{
int i;
for (i=0 ; i<20 ;i++)
{
if (tab[i]==nb1)
tab[i]=nb2;
else
if (tab[i]==nb2)
tab[i]=nb1;
}
}

void main(void)
{
int i;
int t[20];
int nb1;
int nb2;
saisie(t);
affiche(t);
nb1=calcul(t,0);
nb2=calcul(t,1);
printf("le nombre de 0 est %i\n",nb1);
printf("le nombre de 1 est %i\n",nb2);
permut(t,0,1);
nb1=calcul(t,0);
nb2=calcul(t,1);
printf("le nombre de 0 est %i\n",nb1);
printf("le nombre de 1 est %i\n",nb2);
}

Si quelqu'un voit ce qui ne va pas je le remercie d'avance :)
Configuration: Linux Suse
Firefox 2.0.0.16

9 réponses

  • Votes
  • Date
  • Date décroissante
  1. salut,
    Ben si tu recup un int dans ta variable, %d est le code de conversion....
    je connais pas %i...
    1. merci chuka pour l'aide je test sa demain et je te dit quois

      PS: pourquoi mes-tu "%d " et non "%i " ?
      1. ca devrait resoudre le prb....dsl...
        void saisie (int *t)
        {
        int i;
        int j;
        for (i=0 ; i<20 ;i++)
        {
        do{
        printf (" entrez entiers n° %d\n ",i);
        scanf ("%d",&t[i]);
        if(t[i]>=0 && t[i]<=2) break;}
        while(i) ;
        }

        }
        1. salut,
          essaie cela:
          void saisie (int *t)
          {
          int i;
          int j;
          for (i=0 ; i<20 ;i++)
          {

          printf (" entrez entiers n° %d\n ",i);
          scanf ("%d",&t[i]);
          if ( t[i]==1 || t[i]==0 || t[i]==2 ) break;
          }
          }
          1. @fiddy

            Merci pour ta réponse.

            Je viens de tester le programme malheureusement il ne marche tj pas.

            Si dans mon tableau je rentre 3 ou 4 le prog continue et il ne s'arrête pas au bout des 20 entiers :( .
            1. Contributeur
              Bah, c'est normal. Tu dois rentrer que des 0 1 et 2 dans le tableau. Si tu tapes autre chose, on te redemande d'en choisir un ;)
          2. Contributeur
            Salut
            Essaie
            #include <stdio.h>
            #include <stdlib.h>
            
            //TD2 EXO1 tableau de 0,1 ou 2
            void saisie (int t[20])
            {
                int i;
                for (i=0 ; i<20 ;i++)
                {
                    do{
                        printf (" entrez entiers n° %i\n ", i+1);
                        scanf ("%i",&t[i]);
                    }
                    while ( t[i]!=1 && t[i]!=0 && t[i]!=2 );
                }
            }
            
            
            void affiche ( int t[20] ){
                int i;
                for (i=0 ; i<20 ;i++)
                {
                    printf ("%i\n",t[i]);
                }
            }
            
            
            float calcul ( int t[20],int chiffre ){
                int i;
                int v=0;
                for (i=0 ; i<20 ;i++)
                {
                    if (t[i]==chiffre)
                        v++;
                }
                return v;
            }
            
            
            void permut (int tab[20], int nb1,int nb2)
            {
                int i;
                for (i=0 ; i<20 ;i++)
                {
                    if (tab[i]==nb1)
                        tab[i]=nb2;
                    else
                        if (tab[i]==nb2)
                            tab[i]=nb1;
                }
            }
            
            int main(void)
            {
                int i;
                int t[20];
                int nb1;
                int nb2;
                saisie(t);
                affiche(t);
                nb1=calcul(t,0);
                nb2=calcul(t,1);
                printf("le nombre de 0 est %i\n",nb1);
                printf("le nombre de 1 est %i\n",nb2);
                permut(t,0,1);
                nb1=calcul(t,0);
                nb2=calcul(t,1);
                printf("le nombre de 0 est %i\n",nb1);
                printf("le nombre de 1 est %i\n",nb2);
                return 0;
            } 
            

            Cdt
            1. Bonjour

              Je n'ai pas tou lu, mais ça commence mal ...
              while ( t[i]!=1 || t[i]!=0 || t[i]!=2 );

              ce while est toujours vrai ! il faudrait que t[i] soit égal à la fois à 0, à 1 et à 2 pour terminer ta boucle