Problème Fonctions en C
Magenti
Messages postés
22
Statut
Membre
-
fiddy Messages postés 11653 Statut Contributeur -
fiddy Messages postés 11653 Statut Contributeur -
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 ! ^^
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 ! ^^
A voir également:
- Problème Fonctions en C
- Codes secrets Android : accéder aux fonctions cachées - Guide
- Fonctions excel en anglais - Guide
- Cette fonction n'est pas disponible car l'imprimante est en cours d'utilisation canon ✓ - Forum Imprimante
- Les configurations ipv4 utilisateur peuvent ne pas fonctionner correctement en raison de l'architecture de routage ipv6 wan actuelle. ✓ - Forum Réseau
- Mise en forme conditionnelle avec fonction si - Guide
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;
}
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;
}
Pardon, 0 != TRUE !
true == 1
Mais ta fonction f1 est censée retourner un entier, alros qu'elle ne retourne rien dans ton code
true == 1
Mais ta fonction f1 est censée retourner un entier, alros qu'elle ne retourne rien dans ton code
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 ^^
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 ^^
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;
}
{
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;
}
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é
sinon laisse int en valeur de retour, mais dans les if où tu appelles ta fonction, met une égalité
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 ^^
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 ^^
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
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
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 ! ^^
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 ! ^^
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