Fallo de segmentación mostrado por el depurador. Incapaz de localizar la falla

#include <stdio.h>
void fun(int x)
{
     if(x<=20)
     {
     printf("d\n",x);
     return fun(2*x);
     return fun(x/2);
     }
 }
main()
{
      int x;
      printf("Enter the number\n");
      scanf("%d",x);
      fun(x);
}

preguntado el 09 de enero de 11 a las 10:01

Implícito int? ¿Dos devoluciones en un método? -

4 Respuestas

Eso debería ser scanf("%d", &x);, y probablemente printf("%d\n", x);.

Además, estás devolviendo algo (dos veces!) a partir de una void función. Tu código no funcionará como está.

Respondido el 09 de enero de 11 a las 13:01

+1. GCC lo compila. Por supuesto, con -Wall se queja (con razón). - Billy ONeal

@Billy, supongo que simplemente reduce el valor de retorno. Sin embargo, sería divertido si optimizara la llamada a la función porque su resultado nunca se usa. Gracias por la info :) - Frédéric Hamidi

en la función, si planea imprimir el valor de x, debería ser printf ("% d \ n", x); le falta% símbolo. Además, la segunda declaración de retorno en su función nunca se ejecutará.

Respondido el 09 de enero de 11 a las 13:01

Si bien es cierto, eso no es lo que está causando el error de segmentación. - Billy ONeal

Además de lo que dijeron otras personas, después de corregir todos los demás errores programáticos, está dirigiendo su programa a una recursividad infinita.

Respondido el 09 de enero de 11 a las 13:01

Escriba una función Compute (int x) tal que imprima los valores de x, 2x, 4x, 8x…. hasta que el valor no exceda de 20000. Después de llegar a 20000, vuelve de… 8x, 4x, 2x, xy se detiene allí. Nota: (1) No puede usar ninguna variable local en la función (2) No puede usar ningún bucle (for o while o do.. while) o cualquier instrucción GOTO. - Ankur

Le sugiero que agregue la etiqueta 'tarea' a su pregunta, edítela y coloque la pregunta real allí. De lo contrario, la gente rechazará su pregunta y afectará su reputación futura en el sitio web. - Sonrisa de nailon

#include <stdio.h>
void fun(int x)
{    
     if(x<=20000)
     {
     printf("%d\n",x);
      fun(x<<1);     
     printf("%d\n",x);
     }   
 }
main()
{
      int x;
      printf("Enter the number\n");
      scanf("%d",&x);
      printf("\n");
      fun(x);
      system("pause");
}

Este es el programa correcto que estaba buscando. ¡Gracias a todos!

Respondido el 09 de enero de 11 a las 16:01

Utilice el botón {} para formatear correctamente un bloque de código cuando lo publique. - Bart van Ingen Schenau

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.