My loop only works once, then it does not run again, and I have no idea why, it should run until the condition is n

-1
//Algoritmo de números perfectos.
#include <iostream>
using namespace std;
int main(void) {

//Perdonen tantos comentarios.

int n, c=1, a=0, r;
char auxiliar, opc='n';

    do{

cout<<"-------------------------------\n";
cout<<"Algoritmo de números perfectos\n";
cout<<"-------------------------------\n";
//Un número perfecto es un número natural que es igual a la suma de sus divisores propios positivos, sin incluirse él mismo. Ejemplo: 6 es un número perfecto, porque sus divisores propios son 1, 2 y 3; y 6 = 1 + 2 + 3. Los siguientes números perfectos son 28, 496 y 8128.

cout<<"Ingrese un número: ";
cin>>n;
//La variable "n" es por "número" y es la variable que almacenará el número a evaluar y será la condición para detener la iteración.

    cout<<"---\n";
    do{
        r=n%c;
        //El operador módulo (%) que también es conocido informalmente como el operador “resto” porque retorna el resto después de una división entera.
        if (r==0){
        cout<<c<<endl;
            a+=c;
            //La variable "a" es un "acumulador" que sumará y almacenará sus valores en cada iteración.
            }
        c+=1;
        //La variable "c" es un "contador" que incrementará su valor en cada iteración.
    }while(c!=n);

    if(a==n){
        cout<<"---\n";
    cout<<n<<" es un número perfecto!";
}
    else{
    cout<<"---\n";
    cout<<n<<" no es un número perfecto";
        }

        cout<<"\nOtro número perfecto? s/n"<<endl;
        cin>>auxiliar;

        system("pause");
        system("cls");


        }while( auxiliar!= opc);

        cout<<"\nUsted ha salido del programa";
}
    
asked by José Mejía 25.11.2018 в 22:02
source

1 answer

0

This is a problem of initialization of variables in successive iterations of the do ... while outer loop. In particular you have to initialize the variables a and c just below the line with the comment

//La variable "n" es por "número" y es la variable que almacenará el número a evaluar y será la condición para detener la iteración.

a=0; // hay que incluir esta inicializacion
c=1; //hay que incluir esta inicializacion

just before the next do ... while

    
answered by 25.11.2018 в 22:50