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

2.2.3 Estructuras como parámetros de funciones.

Estas en el tema de 2.2.3 Estructuras como parámetros de funciones. en el foro de C/C++ en Foros del Web. Buenas tengo un problema con un codigo, es un error especifico, pero os pondre el codigo y el enunciado entero Ejercicio 35: Diseña un programa ...
  #1 (permalink)  
Antiguo 02/05/2010, 12:18
 
Fecha de Ingreso: abril-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
2.2.3 Estructuras como parámetros de funciones.

Buenas tengo un problema con un codigo, es un error especifico, pero os pondre el codigo y el enunciado entero

Ejercicio 35: Diseña un programa que declare una estructura, llamada punto3D, capaz de contener las coordenadas x, y y z de un punto del espacio de tres dimensiones. Se declarará una función que permitirá desplazar uno de los ejes (x, y o z) de un punto. A dicha función se pasará como argumento el valor actual del eje y el desplazamiento a sumar o restar. El programa leerá coordenadas de puntos de teclado, un desplazamiento para el punto y la coordenada a desplazar. Se visualizará en pantalla las coordenadas del punto desplazado. Al leerse un punto con sus tres coordenadas negativas se parará el programa (en este caso no se llegará a leer el desplazamiento).


Código c:
Ver original
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. void desplazar (int lax, int des);
  5.  
  6. void main()
  7. {
  8.     struct punto3D
  9.     {
  10.         int x;
  11.         int y;
  12.         int z;
  13.     };
  14.  
  15.     struct punto3D elx, ely, elz;
  16.     int desplazamiento, negativo, fin=0;
  17.     char opcion;
  18.  
  19.     while (fin==0)
  20.     {
  21.         negativo=0;
  22.         printf ("Dime la coordenada de x\n");
  23.         scanf ("%d", &elx.x);
  24.         printf ("Dime la coordenada de y\n");
  25.         scanf ("%d", &ely.y);
  26.         printf ("Dime la coordenada de z\n");
  27.         scanf ("%d", &elz.z);
  28.         if (elx.x<<0)
  29.         {
  30.             negativo++;
  31.         }  
  32.         printf ("\nDesplaza el eje x");
  33.         scanf ("%d", &desplazamiento);
  34.    
  35.         desplazar (elx.x, desplazamiento);
  36.  
  37.         if (elx.x<<0)
  38.         {
  39.             negativo++;
  40.         }
  41.  
  42.         if (elx.x>>0)
  43.         {
  44.             negativo--;
  45.         }
  46.  
  47.         if (ely.y<<0)
  48.         {
  49.             negativo++;
  50.         }
  51.  
  52.         if (ely.y>>0)
  53.         {
  54.             negativo--;
  55.         }
  56.  
  57.         if (elz.z<<0)
  58.         {
  59.             negativo++;
  60.         }
  61.  
  62.         if (elz.z>>0)
  63.         {
  64.             negativo--;
  65.         }
  66.    
  67.         if (negativo>=3)
  68.         {
  69.             fin=1;
  70.         }
  71.  
  72.         printf ("La coordenada de x es: %d\n", elx.x);
  73.     }
  74.  
  75.     getch();
  76. }
  77.  
  78. void desplazar (int lax, int des)
  79. {
  80.     char opcion;
  81.    
  82.     printf ("\nQuieres restar o sumar el desplazamiento al eje x\n");
  83.           scanf ("%c", &opcion); //AQUI ESTA EL FALLO, el scanf se lo pasa por el forro
  84.  
  85.     if (opcion=='R')
  86.     {
  87.         lax=lax-des;
  88.     }
  89.  
  90.     if (opcion=='S')
  91.     {
  92.         lax=lax+des;
  93.     }
  94. }

Llevo unos 20 minutos intentando solucionar el fallo, pero no se. Seguramente sera una tonteria, pero en fin....
No hay fallos de compilación, solo que ese scanf no lo hace.

Un saludo
  #2 (permalink)  
Antiguo 02/05/2010, 14:33
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: 2.2.3 Estructuras como parámetros de funciones.

Como te das cuenta que el scanf no lo hace?

Creo que el problema radica en que intentas, por lo que veo del codigo, que la funcion desplazar modifique uno de los parametros, pero en C solo existe paso por valor, de modo que esa funcion no hará lo que supongo quieres que haga.
  #3 (permalink)  
Antiguo 04/05/2010, 11:49
 
Fecha de Ingreso: mayo-2010
Mensajes: 3
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: 2.2.3 Estructuras como parámetros de funciones.

Es un problema bastante común y con una solución muy sencilla.

El programa nunca para a pedirte un carácter. Eso se debe a que scanf coge el último carácter que ha visto: en este caso, el enter o cambio de linea (que también se considera carácter) que introduciste al escribir la opción. Una manera de resolver este problema es la siguiente:

while (getchar() != '\n');

printf ("\nQuieres restar o sumar el desplazamiento al eje x\n");
scanf ("%c", &opcion);

Otra opción es:

printf ("\nQuieres restar o sumar el desplazamiento al eje x\n");
scanf ("\n%c", &opcion);

Ambas opciones tienen el efecto de indicarle a scanf, que no quieres el cambio de linea como caracter sino el introducido por el usuario. Espero que te sirva!

Etiquetas: estructuras, funciones
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 10:06.