Error numero 1 y muy chungo:
si declaras:
int numero,...
...¿¿¿Como es que luego haces la declaracion: int fact[numero] sin antes dar un valor a la variable numero???Esto es un disparate ya que numero puede contener residuos de memoria que puede ser cualquier valor o incluso un cero. ¡¡¡Cuidado con eso!!!
Error numero 2:
Si vas a guardar una cadena es scanf ( "%s", n ); no debes poner el & delante de n ya que el propio nombre de una cadena de caracteres ya es considerado un puntero a la primera posición de la cadena, que es lo que se pide con el especificador %s. En realidad se pide en que posición de la cadena se va iniciar a escribir... Como si quieres empezar de la mitad en delante &n[4] que entonces si lleva el & ya que se trata de una posición concreta de la cadena, y no n que indica el inicio de la cadena. Pero ojo con eso que si escribes desde la mitad ya no dispones de 10 chars sino 5-1, el -1 es el nulo. XDD
En esto me has conseguido liarme hasta a mi jajaj: for ( i = 1; i <= numero - 1; i++ ).
A ver... ¿Con lo anterior has querido hacer que i sea menor o igual que numero menos uno? ¿¿No es lo mismo: for ( i = 1; i<numero; i++ )??
otra cosilla que veo: En el 1º bucle debes usar en fact[] el cont y no i para el indice.
De todas formas no entiendo muy bien tu lógica pero mire a ver si ese ejemplo te sirve:
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#define TAM 100
int main() {
int i = 0;
int contador = 0;
int perfecto = 0;
int fact[TAM] = {0};
char n[10];
int numero = 0;
scanf ( "%9[^\n]%*c", n
);
for ( i = 1; i < numero; i++ ) {
if ( numero % i == 0 ) {
fact[contador] = i;
perfecto += fact[contador]; //aqui ya obtengo el resultado ;)
contador++;
}
}
if ( perfecto != numero ) {
printf ( "\nEl numero NO es perfecto\n" ); return 1;
} else {
i = 0;
for ( i++ ; i < contador; i++ ) {
}
printf ( "=%d\n\n", perfecto
); printf ( "\nEl numero es perfecto: %d\n", perfecto
);
}
return 0;
}