C++ : problème d'exécution
Petitcolas
-
rameur Messages postés 135 Statut Membre -
rameur Messages postés 135 Statut Membre -
Bonjour,
Voilà... J'ai un petit problème avec un programme destiné à calculer le PGCD de deux nombres en C++. Lors de la compilation, il n'y a aucun problème (j'utilise Dev C++). En revanche, lors de l'éxécution, Windows me demande d'envoyer un rapport d'erreur, et le programme ne fonctionne plus. Voici le code source de ce programme :
/* Calcul du PGCD de deux nombres */
/* Inclusion des bibliothèques */
#include <stdio.h>
#include <stdlib.h>
/* Déclaration des variables */
int a, b, reste, alpha, beta;
int main()
{
/* Saisie des deux nombres */
printf ("Calcul du Plus Grand Commun Diviseur (PGCD)\n\n");
printf ("Entrez les deux nombres dont vous souhaitez connaître le PGCD.\n");
printf ("Premier nombre : "), scanf ("%d\n",a);
printf ("Deuxième nombre : "), scanf ("%d\n\n",b);
/* Calcul du PGCD selon l'algorithme d'Euclide */
alpha = a, beta = b;
while (reste != 0)
{
int reste = alpha%beta;
alpha = beta, beta = reste;
}
/* Affichage du résultat */
printf ("Le PGCD de %d et de %d est %d.", a, b, beta);
system("PAUSE");
return 0;
}
Il plante lors de la saisie du premier nombre.
Je vous remercie.
Voilà... J'ai un petit problème avec un programme destiné à calculer le PGCD de deux nombres en C++. Lors de la compilation, il n'y a aucun problème (j'utilise Dev C++). En revanche, lors de l'éxécution, Windows me demande d'envoyer un rapport d'erreur, et le programme ne fonctionne plus. Voici le code source de ce programme :
/* Calcul du PGCD de deux nombres */
/* Inclusion des bibliothèques */
#include <stdio.h>
#include <stdlib.h>
/* Déclaration des variables */
int a, b, reste, alpha, beta;
int main()
{
/* Saisie des deux nombres */
printf ("Calcul du Plus Grand Commun Diviseur (PGCD)\n\n");
printf ("Entrez les deux nombres dont vous souhaitez connaître le PGCD.\n");
printf ("Premier nombre : "), scanf ("%d\n",a);
printf ("Deuxième nombre : "), scanf ("%d\n\n",b);
/* Calcul du PGCD selon l'algorithme d'Euclide */
alpha = a, beta = b;
while (reste != 0)
{
int reste = alpha%beta;
alpha = beta, beta = reste;
}
/* Affichage du résultat */
printf ("Le PGCD de %d et de %d est %d.", a, b, beta);
system("PAUSE");
return 0;
}
Il plante lors de la saisie du premier nombre.
Je vous remercie.
4 réponses
-
Salut,
je pense que ça devrait aller mieux en initialisant la variable 'reste' avant d'entrer dans la boucle 'while'.
A++
La pensée ne commence qu'avec le doute.
ROGER MARTIN DU GARD -
J'avais pas tout vu ...
Quand tu veux mettre plusieurs instructions sur la même ligne il faut les séparer avec un ';' et pas une ','.
De plus tu redéclare 'reste' dans la boucle while
La pensée ne commence qu'avec le doute.
ROGER MARTIN DU GARD -
Et pour les scanf il faut lui passer les adresses des variables soit:
scanf ("%d\n",&a);
scanf ("%d\n\n",&b);
A++
La pensée ne commence qu'avec le doute.
ROGER MARTIN DU GARD-
Salut Ravachol,
sur tous les messges concernant le c++, quand il s'agit d'afficher une variable, tout le monde utilise scanf. Mais pourquoi ne pas faire (tout simplement j'ai envie de dire) cout<<ma_variable<<endl; ou bien
cout<<"entrer le 1e nombre\n";
Je trouve que la syntaxe de scanf est super compliquée par rapport à un cout
Quelle est la différence ?
Pom -
Salut Pom,
je pense que tu veux plutôt parler de printf, pour l'affichage et non de scanf ;-)
Quoique si Petitcolas veux vraiment faire du C++ il devra aussi utiliser cin à la place de scanf pour une saisie clavier. J'ai simplement préjugé, vu son code, qu'il faisait du C avec un compilo C++.
Sinon je suis d'accord avc toi quand à l'utilisation de cout en C++
A++
La pensée ne commence qu'avec le doute.
ROGER MARTIN DU GARD
-
-
salut,
je ne m'y connais pas bien en C++ mais j'ai trouvé un sit où il y a +ieurs exemples.
http://www.inf.enst.fr/~charon/CFacile/initiation/index.html
Bon courage.
Merci-
ton code :
printf ("Premier nombre : "), scanf ("%d\n",a);
printf ("Deuxième nombre : "), scanf ("%d\n\n",b);
corrige :
printf ("Premier nombre : "), scanf ("%d\n",&a);
printf ("Deuxième nombre : "), scanf ("%d\n\n",&b);
remarque scanf prend la reference de la variable et non une copie de celle-ci , le & avant a ou b indique le passage par reference
-