[C con Clase] ayuda con el siguiente codigo
Davidson, Steven
srd4121 en njit.edu
Vie Dic 7 06:16:02 CET 2012
Hola Francisco,
2012/12/6 FRANCISCO SANTIBAÑEZ ALONSO <pandoras_box_789 en hotmail.com>:
> segun yo este es un programa que calcula los factores de cualquier numero
> cualquiera y te los muestra y no se cierra asta que que se oprima 0 de no
> ser asi seguira calculando los factores de los numeros que se le ingresen
> este es el codigo:
>
Veamos el código fuente.
> #include <stdio.h>
> #include <stdlib.h>
En C++, los nombres son: <cstdio> y <cstdlib>.
> #include <conio.h>
Ten presente que este fichero de cabecera no es estándar.
> #include <iostream>
>
> using namespace std;
>
> int main()
> {
> int x;
> do
> {
> int y=3;
> cout << "ingrese un numero exepto 0 para mostrar sus factores su su seleccion es cero 0 el programa se cerara:";
> cin >> x;
> while(x%2==0);
Aquí está el error. Al indicar el punto y coma, el bucle 'while' no
tiene cuerpo a iterar, por lo que seguirá comprobando su condición sin
cesar.
Como te interesa que el bucle 'while' controle las sentencias
posteriores entre las llaves, elimina el punto y coma anterior.
> {
> cout<<"2" <<"*";
> x=x/2;
Intenta acostumbrarte a usar los operadores de asignación para estos
casos. Por ejemplo, puedes reescribir lo anterior así:
x /= 2;
Otra expresión (algo avanzada) para este caso es la siguiente:
x >>= 1;
> }
> while(x>y);
Aquí tenemos el mismo problema anterior. Elimina el punto y coma.
> {
> if(x%y==0)
> {cout<<"y" <<"*";
> x=x/y;}
> else
> {y=y+2;
> continue;}
Intenta no usar 'continue' ni 'break'; ni desde luego 'goto'. En este
caso, 'continue' no tiene ninguna utilidad, porque al terminar la
sentencia 'if/else', volvemos al comienzo del bucle 'while'.
> }
> }
> while(!x==0);
Esta condición no es lógicamente correcta. Creo que lo que quieres
hacer es comprobar si ambos operandos no son iguales. El operador a
usar es !=; esto ahora es,
x != 0
> }
>
Espero que esto te sirva.
Steven
Más información sobre la lista de distribución Cconclase