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

Petitcolas -  
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.

4 réponses

  1. Ravachol Messages postés 568 Statut Membre 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
  2. Ravachol Messages postés 568 Statut Membre 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
  3. Ravachol Messages postés 568 Statut Membre 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
    1. 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
    2. Ravachol Messages postés 568 Statut Membre 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
  4. 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
    1. rameur Messages postés 135 Statut Membre 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