Problème en programme C !!
anonymous
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Voila j'essaye de d'éxecuter un programme en C qui me calcule les factoriels des nombres entiers, mais je crois qu'il ya un problème dans mon code, par ce que à partir du nombre 8, les factoriels calculés sont faux !!
Pour le code le voici :
#include <stdio.h>
int nb,i,fact;
main()
{
printf("Donnez un nombre: ");
scanf("%d",&nb);
fact = 1;
i=1;
while(i<=nb)
{
fact = fact*i;
i=i++;
}
printf("Le factoriel de %d est %d\n", nb, fact);
getch();
}
Merci d'avance !!
Voila j'essaye de d'éxecuter un programme en C qui me calcule les factoriels des nombres entiers, mais je crois qu'il ya un problème dans mon code, par ce que à partir du nombre 8, les factoriels calculés sont faux !!
Pour le code le voici :
#include <stdio.h>
int nb,i,fact;
main()
{
printf("Donnez un nombre: ");
scanf("%d",&nb);
fact = 1;
i=1;
while(i<=nb)
{
fact = fact*i;
i=i++;
}
printf("Le factoriel de %d est %d\n", nb, fact);
getch();
}
Merci d'avance !!
A voir également:
- Problème en programme C !!
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Programme word gratuit - Guide
- Message programmé - Guide
- Desinstaller un programme - Guide
7 réponses
Salut,
Tu as utilisé : i=i++, et c'est un comportement indéfini.
Essaie donc :
Par ailleurs, j'ai remplacé, le prototype de main puisqu'il doit renvoyer un int. J'ai enlevé tes variables globales qui doivent être évitées sauf cas particulier. Et j'ai enlevé ton i=i++ pour i++ tout simplement.
Cdlt
Tu as utilisé : i=i++, et c'est un comportement indéfini.
Essaie donc :
#include <stdio.h>
int main(void)
{
int nb,i,fact;
printf("Donnez un nombre: ");
scanf("%d",&nb);
fact = 1;
i=1;
while(i<=nb)
{
fact = fact*i;
i++;
}
printf("Le factoriel de %d est %d\n", nb, fact);
getchar();
return 0;
}
Par ailleurs, j'ai remplacé, le prototype de main puisqu'il doit renvoyer un int. J'ai enlevé tes variables globales qui doivent être évitées sauf cas particulier. Et j'ai enlevé ton i=i++ pour i++ tout simplement.
Cdlt
Salut,
ha bon y'a toujours un problème ?
Parce que d'après ce que j'ai testé avec les factorielles de 8, 9 et 10, y'a pas d'erreurs.....
Par contre j'ai remplacé le getchar(); par un system("PAUSE");
ha bon y'a toujours un problème ?
Parce que d'après ce que j'ai testé avec les factorielles de 8, 9 et 10, y'a pas d'erreurs.....
Par contre j'ai remplacé le getchar(); par un system("PAUSE");
Et en plus je viens d'essayer avec getchar();mais c'est bien getch(); qu'il faut mettre....
Je suppose que t'es ptetre sous dev c++ et que tu fais ça pour pas que la fenetre se ferme hyper rapidement ^^
Je suppose que t'es ptetre sous dev c++ et que tu fais ça pour pas que la fenetre se ferme hyper rapidement ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Beh j'ai remplacé le getch() par un system("pause"), mais il ya toujours le probleme a partir du 8 !! :S
Est ce que ca na rien avoir avec le type des nombres et tout ca ? ( je parle de %i ou %d .. etc) !!
Merci !!
Est ce que ca na rien avoir avec le type des nombres et tout ca ? ( je parle de %i ou %d .. etc) !!
Merci !!
D'ailleus c'est koi le ( int main (void) ) ???
je né jamais vu ça sur un programme !! Enfin jusqu'à ici !!
je né jamais vu ça sur un programme !! Enfin jusqu'à ici !!
J'ai mis volontairement getchar() au lieu de getch() qui demande l'inclusion de conio.h. Cette fonction n'est donc pas portable. Ainsi vaut-il mieux lui préférer getchar() qui appartient à stdio.h donc portable.
En C comme en C++, main() doit renvoyer un int. De plus, en C, pour définir une fonction sans argument, il faut employer le prototype type main(void).
La combinaison des deux fait qu'on met : int main(void). Si tu veux récupérer les paramètres alors tu peux employer le prototype : int main(int argc, char **argv) ou int main(int argc, char* argv[].
Cdlt
En C comme en C++, main() doit renvoyer un int. De plus, en C, pour définir une fonction sans argument, il faut employer le prototype type main(void).
La combinaison des deux fait qu'on met : int main(void). Si tu veux récupérer les paramètres alors tu peux employer le prototype : int main(int argc, char **argv) ou int main(int argc, char* argv[].
Cdlt