C++ : problème d'exécution

Petitcolas -  
rameur Messages postés 135 Date d'inscription   Statut Membre Dernière intervention   -
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.

4 réponses

Ravachol Messages postés 566 Date d'inscription   Statut Membre Dernière intervention   120
 
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
0
Ravachol Messages postés 566 Date d'inscription   Statut Membre Dernière intervention   120
 
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
0
Ravachol Messages postés 566 Date d'inscription   Statut Membre Dernière intervention   120
 
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
0
pom
 
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
0
Ravachol Messages postés 566 Date d'inscription   Statut Membre Dernière intervention   120
 
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
0
mohamed
 
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
0
rameur Messages postés 135 Date d'inscription   Statut Membre Dernière intervention   21
 
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
0