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

Pedir entero por pantalla

Estas en el tema de Pedir entero por pantalla en el foro de C/C++ en Foros del Web. Buenas!! estoy haciendo algo sencillo, pedir unos enteros por pantalla y después pintarlos. Pero no pinta lo que introduzco.. int pk1, pk2, section, via, nivel; ...
  #1 (permalink)  
Antiguo 27/04/2011, 01:16
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Pedir entero por pantalla

Buenas!! estoy haciendo algo sencillo, pedir unos enteros por pantalla y después pintarlos. Pero no pinta lo que introduzco..

int pk1, pk2, section, via, nivel;

pk1 = 0;
pk2 = 0;
section = 0;
via = 0;
nivel = 0;

printf("Introduzca el tramo, via, nivel , pk1 y pk2 en este orden ");
scanf("%d%u%u%u%u", &section, &via, &nivel, &pk1, &pk2);

printf("Tramo: %d\n", section_id);
printf("Via: %d\n", track_id);
printf("Nivel: %d\n", track_id);
printf("pk1: %d\n", track_id);
printf("pk2: %d\n", track_id);


Pongo 1 1 1 2 3 y pinta: 0 1 1 1 1
  #2 (permalink)  
Antiguo 27/04/2011, 01:38
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Pedir entero por pantalla

Perdon, el codigo es:


int pk1, pk2, section, via, nivel;

pk1 = 0;
pk2 = 0;
section = 0;
via = 0;
nivel = 0;

printf("Introduzca el tramo, via, nivel , pk1 y pk2 en este orden ");
scanf("%d%u%u%u%u", &section, &via, &nivel, &pk1, &pk2);

printf("Tramo: %d\n", section);
printf("Via: %d\n", via);
printf("Nivel: %d\n", nivel);
printf("pk1: %d\n", pk1);
printf("pk2: %d\n", pk2);


Y pinta bien todos menos el primer valor
  #3 (permalink)  
Antiguo 27/04/2011, 02:32
 
Fecha de Ingreso: abril-2011
Mensajes: 7
Antigüedad: 13 años
Puntos: 1
Respuesta: Pedir entero por pantalla

Buenos dias!

He copiado tu segundo código tal cual y a mi si que me funciona, XD!!

Un saludo!
  #4 (permalink)  
Antiguo 27/04/2011, 02:51
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Pedir entero por pantalla

Juas! Oye una pregunta, eske el código no es mio,

¿porke se pone & delante de las variables al pedirlas por pantalla? ¿No se puede hacer sin eso? tratarlas como variables y no como direcciones de memoria??
  #5 (permalink)  
Antiguo 27/04/2011, 03:03
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: Pedir entero por pantalla

A mi también me funciona.

El operador & se usa para indicar la dirección de la variable en la memoria.
__________________
Foros Desarrollo de Juegos
  #6 (permalink)  
Antiguo 27/04/2011, 03:06
 
Fecha de Ingreso: abril-2011
Mensajes: 7
Antigüedad: 13 años
Puntos: 1
Respuesta: Pedir entero por pantalla

Porque lo que tu quieres es lo que guarda la variable, por eso utilizas la referencia, y no la variable en sí. Es mas o menos como los punteros: tu no quieres la dirección de memoria, sino el contenido de la "caja" que apunta esa dirección de memoria.
  #7 (permalink)  
Antiguo 27/04/2011, 03:06
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Pedir entero por pantalla

Y para que se le quiere pasar la direccion? Si tu creas la variable, te olvidas de donde está en memoria, ¿por qué no puede normbrarse normal la variable?

scanf("%d", variable);

printf("%d", variable);
  #8 (permalink)  
Antiguo 27/04/2011, 03:08
 
Fecha de Ingreso: abril-2011
Mensajes: 7
Antigüedad: 13 años
Puntos: 1
Respuesta: Pedir entero por pantalla

Porque si pones

scanf("%d", variable);

lo que asignas es la direccion de la memoria, y no la variable que quieres guardar, y eso te puede provocar graves errores de escritura en memoria reservada por el sistema.
  #9 (permalink)  
Antiguo 27/04/2011, 03:12
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: Pedir entero por pantalla

Porque según el formato de scanf, pude que estés extrayendo más de una variable. Toma por ejemplo un array de chars.
Código:
char str[50];
scanf ("%s",str);
Lo que le pasamos con la dirección es donde debe empezar a escribir.
__________________
Foros Desarrollo de Juegos
  #10 (permalink)  
Antiguo 27/04/2011, 03:15
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Pedir entero por pantalla

Muchas gracias chicos.

Entonces siempre me aconsejais hacer los scanf con &?
  #11 (permalink)  
Antiguo 27/04/2011, 03:16
 
Fecha de Ingreso: abril-2011
Mensajes: 7
Antigüedad: 13 años
Puntos: 1
Respuesta: Pedir entero por pantalla

Si, de hecho, si no pones el &, te da error de compilacion
  #12 (permalink)  
Antiguo 27/04/2011, 03:19
Avatar de yonaida  
Fecha de Ingreso: marzo-2011
Ubicación: Barcelona
Mensajes: 123
Antigüedad: 13 años
Puntos: 20
Respuesta: Pedir entero por pantalla

si haces un scanf sin & cuando quieras printar el contenido de la variable, te aparecera la direccion de memoria donde esta la variable, no el contenido de la misma.
__________________
Everybody Else It's Doing It, So Why Can't We?
  #13 (permalink)  
Antiguo 27/04/2011, 03:30
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años
Puntos: 24
Respuesta: Pedir entero por pantalla

Cita:
Iniciado por Zunri Ver Mensaje
Muchas gracias chicos.

Entonces siempre me aconsejais hacer los scanf con &?
A menos que le estés pasando un puntero a la función. Ya que un puntero indica una dirección en si.
Código:
int numero;
int* puntero=№
scanf ("%d",puntero);
__________________
Foros Desarrollo de Juegos
  #14 (permalink)  
Antiguo 27/04/2011, 10:24
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Pedir entero por pantalla

El problema aca es por cuestion de memoria. Al ser una variable local, la funcion scanf nunca sabria cual es direccion de esa variable local si no le pasamos la variable con &.

Al ser C un lenguaje de bajo nivel, tenemos que encargarnos de cierto manejos de memoria que en otro lenguajes no seria falta.
Otros lenguajes al ser de mas alto nivel el propio compilador debe detectar esto, y mandar por su cuenta la direccion de memoria.

Etiquetas: entero, pantalla, pedir
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 17:24.