Problème Fonctions en C

Fermé
Magenti Messages postés 19 Date d'inscription mercredi 3 mars 2010 Statut Membre Dernière intervention 20 juillet 2012 - 3 mars 2010 à 16:29
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 mars 2010 à 19:55
Bonjour,
Je suis en 1ère année de Licence Informatique et je dois faire un exercice sur les fonctions en langage C.
Mon algo me semble juste mais à l'exécution (par Codeblocks) j'ai constaté qu'il y avait une erreur mais je n'arrive pas à la trouver......si vous pouviez m'aider.....
Voici le programme :

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

int f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
}
}

int f2 (int n)
{
if ((n%3)==0)
{
printf("est multiple de 3 \n");
}
return 0;
}

int main ()
{
int a;
a= lire_entier ();

if (f1(a))
{
printf(" et est pair \n");
}

f2(a);

if ((a%6)==0)
{
printf("est multiple de 6");
}

return 0;
}

Mon problème c'est que si a=3 il m'affiche qu'il est pair et après qu'il est multiple de 3 alors qu'il ne devrait afficher que "est multiple de 3".....:S
Donc l'erreur est dans mon "if" mais moi ça me semble correct....je vois vraiment pas.....
Si vous trouvez......merci d'avance ! ^^

8 réponses

Salut, ton code est a peu pret bon....

Il te dit que a est pair car ta fonction f1 retourne toujours 0.

plus loin tu as un
if(f1(a))
{
/****/
}

vu que f1 retourne 0, et que 0 = TRUE, alors ce que tu as dans ce bloc est tout le temps exécuté.

Remplace ta fonction f1 par ça :

int f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
return 0;
}
return -1;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
3 mars 2010 à 17:27
Salut
non la fonction ne retourne pas 0 puisqu'il n'y a pas de return.
De plus il ne faut pas mettre return 0 puisque sinon son programme ne sera pas cohérent.
Cdlt
0
Pardon, 0 != TRUE !

true == 1

Mais ta fonction f1 est censée retourner un entier, alros qu'elle ne retourne rien dans ton code
0
Magenti Messages postés 19 Date d'inscription mercredi 3 mars 2010 Statut Membre Dernière intervention 20 juillet 2012
3 mars 2010 à 16:46
Merci pour le conseil ^^
Mais je viens de tester, le problème est toujours là et de plus si je mets a=2 il ne m'affiche plus qu'il est pair alors qu'avant ça marchait lol ^^
0
bool f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
return true;
}
return false;
}

bool f2 (int n)
{
if ((n%3)==0)
{
printf("est multiple de 3 \n");
return true;
}
return false;
}

int main ()
{
int a;
a= lire_entier ();

if (f1(a))
{
printf(" et est pair \n");
}

f2(a);

if ((a%6)==0)
{
printf("est multiple de 6");
}

return 0;
}
0
Magenti Messages postés 19 Date d'inscription mercredi 3 mars 2010 Statut Membre Dernière intervention 20 juillet 2012
3 mars 2010 à 16:58
Codeblocks le prend pas, il y aurait une erreur de syntaxe.....:S
Et l'ennui, c'est qu'on n'a pas vu la fonction bool. Apparement, on est censé utiliser que void ou int pour cet exo.
0

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

Posez votre question
le "B" majuscule au début pour l'erreur de synthaxe.

sinon laisse int en valeur de retour, mais dans les if où tu appelles ta fonction, met une égalité
0
Magenti Messages postés 19 Date d'inscription mercredi 3 mars 2010 Statut Membre Dernière intervention 20 juillet 2012
3 mars 2010 à 17:11
Je vois pas trop ce que tu veux dire mais je me suis inspiré de ce que tu as écrit avant et ça marche !!! ^^
Ca donne ça :

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

int f1 (int n)
{
if ((n%2)==0)
{
printf("est multiple de 2");
return 1;

}
return 0;

}
int f2 (int n)
{
if ((n%3)==0)
{
printf("est multiple de 3 \n");
return 1;

}
return 0;

}

int main ()
{
int a;
a= lire_entier ();

if (f1(a))
{
printf(" et est pair \n");

}

f2(a);

if ((a%6)==0)
{
printf("est multiple de 6");
}


return 0;
}

Le seul problème c'est que j'ai du mal à comprendre pourquoi......lol ! Merci pour ton aide ^^
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
3 mars 2010 à 17:30
Le mot clé bool n'existe pas en C.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
3 mars 2010 à 17:38
Bonjour
vous mélangez un peu les deux façons de faire.
Soit votre fonction traite laffichage auquel cas elle n'a pas besoin de renvoyer un int. Ou alors c'est la fonction appelante qui traite en fonction du nombre retournée.
Prenons le dernier cas.
int f1(int n) {
return n%2==0;
}
de même pour l'autre fonction.
Cdlt
0
Magenti Messages postés 19 Date d'inscription mercredi 3 mars 2010 Statut Membre Dernière intervention 20 juillet 2012
10 mars 2010 à 19:46
Bonsoir, j'ai un autre problème avec un algo. Un petit coup de main serait le bienvenu ^^
Voici ce qu'il faut faire : on veut trouver les entiers "x" inférieurs à 1000 tel que x est = à la somme des cubes de ses chiffres. Exemple : 371=3^3+7^3+1^3.
Je dois écrire une fonction qui teste chaque entier compris entre 2 et 999.
J'aimerai isoler dans une variable chaque chiffre du nombre mais je sais pas comment l'écrire....:S

ps : la fonction mod de Maple devient "%" en langage C, mais la fonction quo ?

Merci d'avance ! ^^
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
10 mars 2010 à 19:55
La fonction quo (récupération de quotient ?) est l'opérateur / tout simplement.
Par exemple : 5/2 te donnera 2 et 5%2 te donnera 1.

Cdlt,
0