Ayuda con c!!!!!!!!!!!!!!

Bueno este es el ejercicio, lo estoy intentando modificar, pero soy un pakete en c todavía, llevo varios dias dandole vueltas pero me rindo he llegao a algo que en teoría esta bien pero falla


Modificar la función factorial() para que devuelva -1 en caso de que no se pueda calcular el factorial de su argumento. Corregir el programa principal para que imprima un mensaje de error si factorial() devuelve un -1.
/* Programa: Factoriales
*
* Descripción: Ejemplo de uso de la función factorial().
*
* Revisión 0.0:
*
* Autor:
*/
#include <stdio.h>
/* prototipos de las funciones */

long int factorial(long int a);

main(void)
{
   long int valor;

   printf("Introduzca un valor ");
   scanf("%ld",&valor);
   printf("El factorial de %ld es: %ld\n", valor, factorial(valor));
}

/* Función: factorial()
*
* Descripción: Devuelve el factorial de su argumento
*
* Argumentos: long int a: Valor del que se calcula el factorial.
*
* Valor devuelto: long int: El factorial del argumento a.
*
* Revisión 0.0:
*
* Autor:
*/

long int factorial(long int a)
{
   long int fact; /* valores parciales de factorial */

   fact = 1;
   while(a>0){
      fact *= a;
       a--;
   }
   return fact;
}


He hecho esto pero no furula xD
/* Programa: Factoriales
*
* Descripción: Ejemplo de uso de la función factorial().
*
* Revisión 0.0:
*
* Autor:
*/
#include <stdio.h>
/* prototipos de las funciones */

long int factorial(long int a);


main(void)
{
   long int valor;
   printf("Introduzca un valor ");
   scanf("%ld",&valor);
   if (factorial(valor)==-1);
  {
       printf ("Error");
       }
 
  else
   {
       printf("El factorial de %ld es: %ld", valor, factorial(valor));
   }


// comentarios varios..


long int factorial(long int a)
{
   long int fact; /* valores parciales de factorial */
   fact = 1;
while (a>0) {
         fact *= a;
       a--;;


}
if (a<0)
{
        fact=-1;
}
     }

;

   return fact;
Tienes problemas con los corchetes y los ;, problemas que te aparecerán al intentar compilar, ¿no?
Asi almenos compila

/* Programa: Factoriales

Descripción: Ejemplo de uso de la función factorial().

Revisión 0.0:

Autor:
*/
#include <stdio.h>
/* prototipos de las funciones */

long int factorial(long int a);

main(void)
{
   long int valor;
   printf("Introduzca un valor ");
   scanf("%ld",&valor);
   if (factorial(valor)==-1) 
       printf ("Error");       
   else
    printf("El factorial de %ld es: %ld", valor, factorial(valor));
   }


long int factorial(long int a){
   long int fact; /* valores parciales de factorial */
   fact = 1;
while (a>0) {
         fact *= a;
       a--;
}

if (a<0)
        fact=-1;

   return (fact);   
}
El_Harto escribió:Asi almenos compila

/* Programa: Factoriales

Descripción: Ejemplo de uso de la función factorial().

Revisión 0.0:

Autor:
*/
#include <stdio.h>
/* prototipos de las funciones */

long int factorial(long int a);

main(void)
{
   long int valor;
   printf("Introduzca un valor ");
   scanf("%ld",&valor);
   if (factorial(valor)==-1) 
       printf ("Error");       
   else
    printf("El factorial de %ld es: %ld", valor, factorial(valor));
   }


long int factorial(long int a){
   long int fact; /* valores parciales de factorial */
   fact = 1;
while (a>0) {
         fact *= a;
       a--;
}

if (a<0)
        fact=-1;

   return (fact);   
}


Muchas Gracias ya he conseguio que funcione!!

Al final me ha quedado así

/* Programa: Factoriales

Descripción: Ejemplo de uso de la función factorial().

Revisión 0.0:

Autor:
*/
#include <stdio.h>
/* prototipos de las funciones */

long int factorial(long int a);

main(void)
{
   long int valor;
   printf("Introduzca un valor ");
   scanf("%ld",&valor);
   if (factorial(valor)==-1)
       printf ("Error");       
   else
    printf("El factorial de %ld es: %ld", valor, factorial(valor));
   }


long int factorial(long int a){
   long int fact; /* valores parciales de factorial */
   fact = 1;
while (a>0) {
         fact *= a;
       a--;
}

if (a<0)
        fact=-1;

   
   return fact;
}
Si quieres dejarlo casi perfecto, comprueba que no hay desbordamiento. ;)
4 respuestas