[ Foro de C ]

Ayuda con variables

24-Sep-2015 09:18
Invitado (uurrss)
1 Respuestas

Mi problema es el siguiente:
Tengo que crear un programa en C que de instrucciones para un motor a pasos que mueva el alerón de un avión, el programa básicamente ya lo tengo hecho, es el siguiente:


#include <stdio.h>
#include <windows.h>
#include <conio.h>

int main()
{
    int opcion,p=1,px=0,x;
    float ang=0;
    reinstruccion:
    printf("PROGRAMA PARA MOVER UN ALERON\n\n");
    printf("Para elejir direcci%cn hacia arriba presiona 1.\n",162);
    printf("Para elejir direcci%cn hacia abajo presiona 2.\n",162);
    printf("Para salir del programa presiona 3.\n");
    scanf("%i",&opcion);
    switch(opcion)
    {
                  case 1:
                  printf("¿Cu%cntos pasos muevo el aler%cn: \n",160,162);
                  scanf("%i",&p);                         
                  if(p<=25)
                  {
                        while(1){
                  x=1; ang=ang+1.8; px=px+1;
                  printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
                  if(px>=p)break;
                  x=2; ang=ang+1.8; px=px+1;
                  printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
                  if(px>=p)break;
                  x=4; ang=ang+1.8; px=px+1;
                  printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
                  if(px>=p)break;
                  x=8; ang=ang+1.8; px=px+1;
                  printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
                  if(px>=p)break;
                  }
                  }
                  else
                  {
                         printf("No es un caso v%clido\n\n",160);
                  }
                  break;
                  case 2: printf("¿Cu%cntos pasos muevo el aler%cn: \n",160,162);
                  scanf("%i",&p);
                  if(p<=25)
                  {
                           while(1){
                  x=8; ang=ang+1.8; px=px+1;
                  printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
                  if(px>=p)break;
                  x=4; ang=ang+1.8; px=px+1;
                  printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
                  if(px>=p)break;
                  x=2; ang=ang+1.8; px=px+1;
                  printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
                  if(px>=p)break;
                  x=1; ang=ang+1.8; px=px+1;
                  printf("Paso = %i  A un angulo de: %f grados,  Dato enviado al puerto = %i\n",px,ang,x);
                  if(px>=p)break;
                  }
                  }
                  else
                  {
                      printf("No es un caso v%clido\n\n",160);
                  }
                  break;
                  case 3: 
                       system("pause");
                       exit (0);
                  break;
                  default: printf("No es un caso v%clido\n\n",160);
    }
    goto reinstruccion;
}


El problema surge cuando doy las instrucciones al programa, se supone que cuando termina una instrucción puedo volver a dar las instrucciones y obtener los resultados de nuevo desde el principio, pero en lugar de eso los resultados se siguen ejecutando como terminaron los anteriores, mi maestro dijo algo de tengo que reiniciar variables pero no entendí bien. Por favor necesito ayuda es urgente.


24-Sep-2015 11:19
Nacho Cabanes (+84)

Buffff... Cuesta mucho leer ese programa. Las tabulaciones no indican el orden lógico del programa, el "bucle principal" no es un bucle sino un "goto", los bucles de movimiento de alerones son bucles sin fin interrumpidos con un break...

Aun así, la idea básica de reiniciar variables es que les asignes un valor dentro del bucle, no fuera de él. En tu caso, la idea sería algo como


    reinstruccion:
    int opcion,p=1,px=0,x;
    float ang=0;


en vez de


    int opcion,p=1,px=0,x;
    float ang=0;
    reinstruccion:


aunque lo correcto es hacerlo en dos pasos, primero declarando y luego asignando valores:


    int p;
    reinstruccion:
    p=1;


 






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)