Foros del Web » Programación para mayores de 30 ;) » C/C++ »

comenzando con C, primer problema!

Estas en el tema de comenzando con C, primer problema! en el foro de C/C++ en Foros del Web. Hola, muy buenas. Tengo intención de aprender a programar en c y ya estoy empezando a pegarme con el lenguaje. Estoy creando un programa básico ...
  #1 (permalink)  
Antiguo 28/07/2010, 06:53
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
comenzando con C, primer problema!

Hola, muy buenas. Tengo intención de aprender a programar en c y ya estoy empezando a pegarme con el lenguaje.

Estoy creando un programa básico en el que se pide mediante un subprograma datos por teclado (int), y más tarde quiero comprobar que se han quedado en las variables bien almacenado el valor introducido.
Pero por el momento no funciona, almacena otra información de la que se ha introducido.

#include <stdio.h>
#define INFINITO 999

void toma_de_datos(int *grupos, int *elementos_grupo, int *fallos_grupo, int *num_servidores);

main () /* PROGRAMA PRINCIPAL */
{
int grupos, elementos_grupo, fallos_grupo, num_servidores;

toma_de_datos(&grupos, &elementos_grupo, &fallos_grupo, &num_servidores);
printf("%d",fallos_grupo);

return(0);
}


void toma_de_datos(int *grupos, int *elementos_grupo, int *fallos_grupo, int *num_servidores)
{
printf("Numero de grupos: ");
scanf("%d",*grupos);

printf("Numero de elementos por grupo: ");
scanf("%d",*elementos_grupo);

printf("Numero de fallos por grupo: ");
scanf("%d",*fallos_grupo);

printf("Numero de servidores: ");
scanf("%d",*num_servidores);
}


¡Muchas gracias x vuestra atención!
  #2 (permalink)  
Antiguo 28/07/2010, 07:38
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: comenzando con C, primer problema!

estas asignando mal a scanf recuerda que scanf para guardar los datos necesita un puntero y estas poniendo *grupos, *fallos_grupo, etc..

deberias poner grupos, fallos_grupo, etc sin el *

Saludos.
  #3 (permalink)  
Antiguo 28/07/2010, 07:57
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: comenzando con C, primer problema!

Muchisimas gracias.

La verdad que estoy un poco liado, acostumbrado a pascal que simplemente pones el nombre de la variable y ya vale, aquí en c me encuentro en algunos ejemplos que a veces se ponen con *, otras con & y otras sin nada delante de la variable.
  #4 (permalink)  
Antiguo 28/07/2010, 07:59
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: comenzando con C, primer problema!

si has visto pascal sabras que existe el concepto de variable por valor y variable por referencia y el tema de los "punteros".
El C es asi de puñetero hay que tener mucho cuidado :D
  #5 (permalink)  
Antiguo 28/07/2010, 08:02
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: comenzando con C, primer problema!

En PASCAL por referencia simplemente añadías la palabra VAR en la cabecera del subprograma, y por referencia nada.

En c el var de pascal equivale al * de c ¿?
Y cuando se pone &?? y cuando nada???


En mi programa, ¿tengo bien declarada la cabecera del subprograma, y después la llamada a este subprograma con los caracteres &grupo,etc)
Mil gracias x la ayuda

Última edición por Zunri; 28/07/2010 a las 08:09
  #6 (permalink)  
Antiguo 28/07/2010, 08:33
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: comenzando con C, primer problema!

El "*" cumple distintos roles dependiendo de donde esta. A la hora de declarar un tipo, si añades el "*" esto indica que es un puntero hacia ese tipo.

Ahora si usas el "*" adelante de una variable lo que indica es que tomes el valor de variable y busquees en memoria esa direccion. Y te quedas con ese valor: Ejemplo:

int * i = 400;
a = *i;

Eso lo que hace busca en la memoria la posicion 400, toma el valor que hay en esa posicion y lo devuelve:

En cambio si usas el "&" delante de una variable lo que haces el devolver la posicion de memotia donde se encuntra esa variable almacenada.

Por eso para pasar un valor por referencia debes al llamar la funcion utilizar el "&". Y luego adentro de la funcion para modificar su valor debes usar el "*".
  #7 (permalink)  
Antiguo 28/07/2010, 08:43
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: comenzando con C, primer problema!

Entendido!!! sólo una última aclaración:

para utilizar una variable local, ya sea dentro de un subprograma como en el programa principal, para crearla se pone sin nada int variable y luego se modifica sin añadirle nada variable=5; , luego ya si hay que pasarla a algún subprograma ya se añade en el caso de que se pase por referencia, pero el uso normal es sin nada, verdad¿?
  #8 (permalink)  
Antiguo 28/07/2010, 08:48
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: comenzando con C, primer problema!

Estas en lo correcto!!

Etiquetas: primer
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:11.