Problema Funciones C

Iniciado por Abedul69, 21 Septiembre 2019, 14:49 PM

0 Miembros y 1 Visitante están viendo este tema.

Abedul69

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?

K-YreX

#1
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:

int numero;
scanf("%d", &numero);

Otra forma de hacerlo para no crear la variable <numero> es guardarlo directamente en el parámetro <variable> así:

void modificar_variable(int *variable){
   printf("Introduzca el valor que desee que tenga la variable: ");
   scanf("%d", variable); // en este caso no se usa & porque lo estas pasando con un puntero
}


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

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Abedul69

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