Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/05/2010, 12:18
nestor1991ag
 
Fecha de Ingreso: abril-2010
Mensajes: 13
Antigüedad: 14 años, 7 meses
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