Problème au niveau d une fonction
Résolu/Fermé
SalimRT
Messages postés
14
Date d'inscription
lundi 31 décembre 2018
Statut
Membre
Dernière intervention
24 février 2019
-
Modifié le 16 févr. 2019 à 19:09
NHenry Messages postés 15164 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 novembre 2024 - 24 févr. 2019 à 14:54
NHenry Messages postés 15164 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 novembre 2024 - 24 févr. 2019 à 14:54
A voir également:
- Problème au niveau d une fonction
- Fonction si et - Guide
- Mise a niveau windows 10 - Accueil - Mise à jour
- Fonction moyenne excel - Guide
- Fonction filtre excel n'existe pas - Forum Excel
- Cette fonction n'est pas disponible actuellement tv lg - Forum Téléviseurs
2 réponses
NHenry
Messages postés
15164
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 novembre 2024
345
16 févr. 2019 à 19:15
16 févr. 2019 à 19:15
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.
De plus, ton programme ne sort pas avec le code 0, mais un 0xC0..094.
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
17 févr. 2019 à 20:53
17 févr. 2019 à 20:53
Bonjour,
Ligne 24 il faut faire un modulo 2 pas un modulo i qui plante quand i vaut 0.
Ligne 24 il faut faire un modulo 2 pas un modulo i qui plante quand i vaut 0.
SalimRT
Messages postés
14
Date d'inscription
lundi 31 décembre 2018
Statut
Membre
Dernière intervention
24 février 2019
Modifié le 17 févr. 2019 à 22:39
Modifié le 17 févr. 2019 à 22:39
oui merci ca fonctionne mais le résultat affiché (return de la fonction) est incorrecte Pourquoi?
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 18 févr. 2019 à 14:18
Modifié le 18 févr. 2019 à 14:18
je suppose que c'est parce que tu passes systématiquement 2 en 2ème argument de ta fonction
cela veut aussi dire que tu dois disposer de cette information qui, actuellement, n'est connue qu'à l'intérieur de
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 ...
SalimRT
Messages postés
14
Date d'inscription
lundi 31 décembre 2018
Statut
Membre
Dernière intervention
24 février 2019
Modifié le 19 févr. 2019 à 20:20
Modifié le 19 févr. 2019 à 20:20
aa oui j'ai pas fais attention merci Dalfab
mais le probleme persiste car le return de la fonction reste toujours 0
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;
}
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 20 févr. 2019 à 00:51
Modifié le 20 févr. 2019 à 00:51
comme te l'a dit NHenry, tu passes
comme je te l'avais dit ci-dessus, la valeur de
pour que la variable
tu dois donc modifier ton prototype de
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(),
nn'est pas modifié et vaut toujours
0...
comme je te l'avais dit ci-dessus, la valeur de
nsaisie 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
nde 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()...
SalimRT
Messages postés
14
Date d'inscription
lundi 31 décembre 2018
Statut
Membre
Dernière intervention
24 février 2019
20 févr. 2019 à 04:37
20 févr. 2019 à 04:37
Dal y'a t_il une méthode sans faire un pointeur?
cordialement
cordialement
16 févr. 2019 à 19:47
et merci pour l'assistance
17 févr. 2019 à 14:27
Ensuite, Si tu fais un "return 0", le code de sortie doit être 0 et pas un 0xC0..094.