Problème au niveau d une fonction

Résolu
SalimRT Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour tous le monde j'ai un petit probléme au nivaeu d'une fonction son rôle est de déterminer les nombres paires d'un tableau données tout est compilable est sans faute (éxécutable) mais au niveau de la console cette fonction ne retourne pas les nbres paires
voici mon code pour que vous puissiez me comprendre mieux:
#include <stdio.h>
#include <stdlib.h>
void menu()
{
printf("1- Une fonction qui permet de saisir n entiers et les stocker dans un tableau tab.\n");
printf("2- Une fonction qui determine le nombre des valeurs paires dans le tableau tab.\n");
printf("3- Une fonction qui permet d’afficher les entiers stockes dans le tableau tab.\n");
printf("0- Quitter\n");
}
void saisir_tab(int T[],int n)
{
    int i;
    printf("Saisir le nombre des entiers a stockes dans le tableau\n");
    scanf("%d",&n);
    for(i=0;i<n;i++){
        printf("Donner la valeur %d: ",i+1);
        scanf("%d",&T[i]);
    }
}
int determiner_paire(int T[],int n)
{
    int i,j=0;
    for (i=0;i<n;i++){
        if(T[i]%i==0){
            j++;
        }
    }
    return j;
}
void affiche_tab(int T[],int n)
{
    int i;
    printf("Tableau:\n");
    for(i=0;i<n;i++){
        printf("%d|\t",T[i]);
    }
    printf("\n");
}
int main()
{
    int j,n=0;
    int T[20];
    do{
    menu();
    scanf("%d",&n);
    switch(n)
{
    case 0:
        EXIT_SUCCESS;
        break;
    case 1:
        saisir_tab(T,n);
        break;
    case 2:
        j=determiner_paire(T,n);
        printf("il y a %d valeurs paires dans le tableau\n",j);
        break;
    case 3:
        affiche_tab(T,n);
        break;
    default:
        printf("choix invalide\n");
        break;

}
}while(n!=0);
    return 0;
}

et ceci une capture montre ce problème

et merci d'avance
cordialement

EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Dans ta fonction saisir_tab, le paramètre "n" est passé par valeur, donc ailleurs dans ton programme il reste à 0, regarde comment le passer par référence ou pointeur.
De plus, ton programme ne sort pas avec le code 0, mais un 0xC0..094.
1
SalimRT Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
bonsoir NHenry pouvez vous m'expliquer ce que tu a dit parce que j'ai rien comprendre
et merci pour l'assistance
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Regardes comment passer un paramètre par référence ou par pointeur (recherche sur Internet)
Ensuite, Si tu fais un "return 0", le code de sortie doit être 0 et pas un 0xC0..094.
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,
Ligne 24 il faut faire un modulo 2 pas un modulo i qui plante quand i vaut 0.
1
SalimRT Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
oui merci ca fonctionne mais le résultat affiché (return de la fonction) est incorrecte Pourquoi?
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
je suppose que c'est parce que tu passes systématiquement 2 en 2ème argument de ta fonction
determiner_paire()
(c'est à dire le chiffre correspondant au menu présenté à l'utilisateur), au lieu de passer le nombre de valeurs saisies dans le tableau, qui est, visiblement, ce que cette fonction attend

cela veut aussi dire que tu dois disposer de cette information qui, actuellement, n'est connue qu'à l'intérieur de
saisir_tab()
et est perdue une fois cette fonction exécutée ...
0
SalimRT Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
aa oui j'ai pas fais attention merci Dalfab
mais le probleme persiste car le return de la fonction reste toujours 0
#include <stdio.h>
#include <stdlib.h>
void menu()
{
printf("1- Une fonction qui permet de saisir n entiers et les stocker dans un tableau tab.\n");
printf("2- Une fonction qui determine le nombre des valeurs paires dans le tableau tab.\n");
printf("3- Une fonction qui permet d’afficher les entiers stockes dans le tableau tab.\n");
printf("0- Quitter\n");
}
void saisir_tab(int T[],int n)
{
int i;
printf("Saisir le nombre des entiers a stockes dans le tableau\n");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("Donner la valeur %d: ",i+1);
scanf("%d",&T[i]);
}
}
int determiner_paire(int T[],int n)
{
int i,j=0;
for (i=0;i<n;i++){
if(T[i]%i==0){
j++;
}
}
return j;
}
void affiche_tab(int T[],int n)
{
int i;
printf("Tableau:\n");
for(i=0;i<n;i++){
printf("%d|\t",T[i]);
}
printf("\n");
}
int main()
{
int choix,j,n=0;// n dois étre intialiser car un message de warning apparait si je ne l'initialise pas
int T[20];
do{
menu();
scanf("%d",&choix);
switch(choix )
{
case 0:
EXIT_SUCCESS;
break;
case 1:
saisir_tab(T,n);
break;
case 2:
j=determiner_paire(T,n);
printf("il y a %d valeurs paires dans le tableau\n",j);
break;
case 3:
affiche_tab(T,n);
break;
default:
printf("choix invalide\n");
break;

}
}while(choix!=0);
return 0;
}
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
comme te l'a dit NHenry, tu passes
n
à
saisir_tab()
et non pas un pointeur sur cette variable, donc l'appel à la fonction passe une copie de
n
, et c'est cette copie qui est modifiée à l'intérieur de
saisir_tab()
, donc en sortant de
saisir_tab()
,
n
n'est pas modifié et vaut toujours
0
...

comme je te l'avais dit ci-dessus, la valeur de
n
saisie par l'utilisateur n'est connue qu'à l'intérieur de
saisir_tab()
et est perdue une fois cette fonction exécutée

pour que la variable
n
de la fonction appelante puisse être modifiée par la fonction appelée, il faut lui passer un pointeur sur
n
...

tu dois donc modifier ton prototype de
saisir_tab()
et ton code dans cette fonction pour gérer un pointeur sur
n
, et modifier aussi ton appel à
saisir_tab()
...
0
SalimRT Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
Dal y'a t_il une méthode sans faire un pointeur?
cordialement
0