Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Abedul69 en 21 Septiembre 2019, 14:49 pm



Título: Problema Funciones C
Publicado por: Abedul69 en 21 Septiembre 2019, 14:49 pm
Hola gente. Tengo un programa sencillo para inicarme con funciones. El problema es, que en C no me funciona y en C++ (cambiando los printf por cout y scanf por cin) si funciona. El error cuando debugeo es "program received signal sigsegv segmentation fault".

El programa es el siguiente:
/* C */
/* Programa que tiene una funcion que modifica una variable numerica pasada por parametro.
La funcion debe pedir un numero al usuario y asignarselo a la variable*/

/* Bibliotecas */
#include <stdio.h>
#include <stdlib.h>

/* Funciones a utilizar */
void modificar_variable(int *variable);

/* Programa Principal */
int main (void)
{
int numero_a_cambiar=3;
printf("El numero a cambiar es %d\n",numero_a_cambiar);
modificar_variable(&numero_a_cambiar);
printf("El numero cambiado es %d",numero_a_cambiar);

return 0;
}

/* Funciones */
void modificar_variable(int *variable){
int numero;
printf("Introduzca el valor que desee que tenga la variable: ");
scanf("%d",numero);
*variable=numero;
}


la cosa es que creo que el problema esta en el scanf, porque si escriblo lo siguiente funciona:


/* Funciones */
void modificar_variable(int *variable){
int numero;
printf("Introduzca el valor que desee que tenga la variable: ");
numero=35;
// scanf("%d",numero);
*variable=numero;
}

Si escondo el scanf con comentarios y le pongo un valor a numero, el programa y la funcion van bien.
¿Alguna idea de que esta fallando?


Título: Re: Problema Funciones C
Publicado por: K-YreX en 21 Septiembre 2019, 15:05 pm
La función <scanf()> tiene que recibir como segundo parámetro la dirección de memoria de la variable donde quieres guardar el número en este caso.
Corrección:
Código
  1. int numero;
  2. scanf("%d", &numero);
Otra forma de hacerlo para no crear la variable <numero> es guardarlo directamente en el parámetro <variable> así:
Código
  1. void modificar_variable(int *variable){
  2.    printf("Introduzca el valor que desee que tenga la variable: ");
  3.    scanf("%d", variable); // en este caso no se usa & porque lo estas pasando con un puntero
  4. }

PD: Para futuras consultas coloca tus códigos entre etiquetas de Código GeSHi para facilitar la lectura a los demás. Suerte :-X


Título: Re: Problema Funciones C
Publicado por: Abedul69 en 21 Septiembre 2019, 15:32 pm
Madre miaaaa!!!! Pero si es un olvido que he tenido otras veces y lo he arreglado sin problemas!!!

Cuando estas ciego, estas ciego. Con lo obvio que se ahora que me lo dices.

Muchisimas gracias YreX-DwX!!! Te debo una!! =D  :D :D