Fprintf de factorielles !

Signaler
Messages postés
368
Date d'inscription
mercredi 14 novembre 2001
Statut
Membre
Dernière intervention
1 septembre 2008
-
Messages postés
40
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
25 février 2004
-
voila, je comprend pas pourquoi le prog me met une erreur lors de l'execution alors que le compilateur et le linker n'ont rien vu d'anormal !

#include "iostream.h"
#include "stdlib.h"
#include "conio.c"
#include "fstream.h"

FILE *save;
char *nom;

int main()
{
clrscr();
int restart,ON;
double Xfact,i,j;

i = 1;
textcolor(LIGHTGRAY);
cout << "Donnez la valeur de X dans X! : \n";
cin >> Xfact;

textcolor(LIGHTGRAY);
cout << "\n\nVoulez-vous ecrire les \202tapes interm\202diaires dans un fichier ?\n\t1- oui\n\t2- non\n";
cin >> ON;
if (ON == 1 )
{
cout << "\n\nQuel sera son nom : \n";
cin >> nom ; // on rentre le nom et ca plante !
save = fopen(nom, "w+");
}

if (Xfact == 0 )
{
textcolor(RED);
cout << "\n\nLa factorielle de 0, not\202e 0!, vaut 1. C'est une convention\n\n\n";
switch (restart)
{
case 1 : main(); break ;
case 2 : return 0; break ;
}
}
else
{
for (j = 2;j<Xfact+1;j++)
{
i *= j;
fprintf(save,"%i", i);
}
}

textcolor(LIGHTBLUE);
cout <<"\n\nLa factorielle de ";
textcolor(RED);
cout << Xfact ;
textcolor(LIGHTBLUE);
cout << " vaut " ;
textcolor(RED);
cout << i ;
cout << "\n\n\n";

textcolor(BROWN);
cout << "Recommencer ?\n\t1- oui\n\t2- non\n\n\n";
cin >> restart;

switch (restart)
{
case 1 : main(); break ;
case 2 : return 0; break ;
}
}

1 réponse

Messages postés
40
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
25 février 2004

C'est un peu normal que ça plante ....
En effet, tu utilises ton cin>> avec un pointeur qui pointe sur n'importe quoi.
En fait, il faut faire char nom[64];
Ou bien char* nom=new char[64]; mais dans ce cas faudra faire un delete[] nom; à la fin du prog.
NB : 64 est la taille de la chaine, tu peux prendre plus large si tu penses que 64 caract. ne suffiront pas.