Problème en programme C !!

anonymous -  
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 !!
A voir également:

7 réponses

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut,
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
0
anonymous
 
Merci mais il ya toujous le même problème !! :s:s
0
Utilisateur anonyme
 
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");
0
Utilisateur anonyme
 
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 ^^
0

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

Posez votre question
pomolo11
 
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 !!
0
pomolo11
 
D'ailleus c'est koi le ( int main (void) ) ???
je né jamais vu ça sur un programme !! Enfin jusqu'à ici !!
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
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
0