[C con Clase] problemas con scanf

raul castelar raulcastelar en hotmail.com
Mar Abr 30 12:30:46 CEST 2013


Perdón: el código de antes no lo había corregido con las lineas de prueba que estab haciendo este está mas claro, os daréis cuenta que si quito el menú , hasta while==0 ,funciona. Incluso he quitado la tubería.Muchas gracias por todo.
#include <stdio.h>#include <windows.h>#include <stdlib.h>typedef struct{   char Puerto[5];   int Baudios;   int BitsDatos;   int BitsStop;   char Paridad[25];} tipoOpciones;
tipoOpciones Ops;         HGLOBAL hCadena, hSalida; char *dato_r, *dato_t;DCB dcb;                  HANDLE idComDev,hHilo;HANDLE hReadPipe,hWritePipe;BOOL Comunicacion;DWORD dwEvtMask;DWORD numero_byte,caracteres;int coordenada_x[1024],coordenada_y[1024],m;
// Prototipos:void IniciarBuffers();void LiberarBuffers();BOOL InicioComunicacion(void);BOOL FinComunicacion(void);BOOL LeeSerie();void EscribirSerie(char *buf);DWORD Hilo(LPDWORD lpdwParam);
int main(){    DWORD n, param, id;   int accion=0,m;   char abre[]="open";   char cierra[]="close";   BOOL fSuccess;   // Inicializar opciones del puerto serie:   strcpy(Ops.Puerto, "COM1");   Ops.Baudios = 4800;   Ops.BitsDatos = 8;   Ops.BitsStop = 1;   strcpy(Ops.Paridad, "Sin paridad");
   IniciarBuffers();   // No se ha establecido comunicación:      if(!InicioComunicacion()) {
       printf ( "ERROR: no inicializacion puerto serie\n");       printf ("Configure el puerto COM1 de su PC con los siguientes parametros:\n");       printf ("\tBaudios:4800\n");       printf ("\tbits de datos:8\n");       printf ("\tbit de stop:1\n");       printf ("\tSin paridad\n");                       return (EXIT_SUCCESS);     }   hHilo = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE) Hilo, &param, 0, &id);
  do {  /*desde aqui*/       printf ("1.Cargar archivo Excellon\n");       printf ("2.Posicionar herramienta en origen\n");       printf ("3.Inicio perforado\n");       printf ("4.Abrir/cerrar\n");       printf ("5.Salir\n");       printf("Introduzca su opcion:");       
       while (accion==0){               scanf ("%d",&accion);}
    switch (accion){            case  1:      /*llama a un afuncion que leer un archivo*/              accion=0;                system ("cls");              caracteres=4;         for (m=0;m<=caracteres;m++)              {                 *dato_t=abre[m];                   dato_t++;              }for (m=0;m<=caracteres;m++)                 {                    dato_t--;                     }                                                    EscribirSerie(dato_t);                      case 2:               accion=0;              system ("cls");             case 3:              accion=0;               system ("cls");             case 4:             accion=0;              system ("cls");             case 5:              system ("cls");              accion=6;                                 }  }while(accion==0);/*hasta aquí, si sequita entra en la función*/   caracteres=4;                                             for (m=0;m<=caracteres;m++)                                                  {                                                   *dato_t=abre[m];                                                    dato_t++;                                                   }for (m=0;m<=caracteres;m++)                                                  {                                                    dato_t--;                                                   }                                                                                         EscribirSerie(dato_t);              CloseHandle(hHilo);    FinComunicacion();   LiberarBuffers();    return (EXIT_SUCCESS);           }void IniciarBuffers(){   hCadena = GlobalAlloc(GMEM_MOVEABLE, 4096);   hSalida = GlobalAlloc(GMEM_MOVEABLE, 4096);   dato_r = (char *)GlobalLock(hCadena);   dato_t = (char *)GlobalLock(hSalida);}void LiberarBuffers(){   GlobalUnlock(hCadena);   GlobalUnlock(hSalida);   GlobalFree(hCadena);   GlobalFree(hSalida);}BOOL InicioComunicacion(void){   BOOL fSuccess;
   // Abrir el fichero asociado al puerto:   idComDev = CreateFile(Ops.Puerto, GENERIC_READ | GENERIC_WRITE,   		0, NULL, OPEN_EXISTING, 0, NULL);   if(idComDev ==INVALID_HANDLE_VALUE) {       printf ( "ERROR: CreateFile. Inicialización puerto serie");            return 0;   }   // Leer estructura de control del puerto serie, cdb:   fSuccess = GetCommState(idComDev, &dcb);   if(!fSuccess) { printf ( "ERROR: CreateFile. Inicialización puerto serie");        return 0;   }
   // Modificar el dcb según las opciones definidas:   dcb.BaudRate = Ops.Baudios;   dcb.ByteSize = Ops.BitsDatos;
   if(!strcmp(Ops.Paridad, "Sin paridad")) dcb.Parity = NOPARITY;   if(!strcmp(Ops.Paridad, "Paridad par")) dcb.Parity = EVENPARITY;   if(!strcmp(Ops.Paridad, "Paridad impar")) dcb.Parity = ODDPARITY;
   switch(Ops.BitsStop) {         case 1:         dcb.StopBits = ONESTOPBIT;         break;      case 2:         dcb.StopBits = TWOSTOPBITS;         break;   }
   // Modificar la estructura de control del puerto serie:   fSuccess = SetCommState(idComDev, &dcb);   if(!fSuccess) {       printf ( "ERROR: CreateFile. Inicialización puerto serie");             return 0;   }   // Especifica que queremos monitorizar la recepción de datos:   if(!SetCommMask(idComDev, EV_RXCHAR)) {       printf ( "No se pudo activar la el evento de lectura.");              }
   // Comunicación establecida:      return 1;}BOOL FinComunicacion(void){   // Liberar máscara de eventos del puerto serie:   SetCommMask(idComDev, 0);   // Cerrar el puerto serie:   CloseHandle(idComDev);   // Comunicación interrumpida:   Comunicacion = 0;   return 1;}BOOL LeeSerie(){   char i;   DWORD x;   COMSTAT cs;
   // Actualizar COMSTAT, sirve para   // averiguar el número de bytes en el buffer de entrada:   ClearCommError(idComDev, &x, &cs);   // Leer cs.cbInQue caracteres:   ReadFile(idComDev, dato_r, cs.cbInQue, &x, NULL);    /*  for (i=0;i<=x-1;i++)   {
    datos_recepcion[i]=*dato_r;    dato_r++;    printf ("datos son=%x\n",datos_recepcion[i]);*/   }     void EscribirSerie(char *buf ){   char Buffer[1024];   DWORD n, l,p, err;      for(n=0;n<=caracteres;n++)   {   Buffer [n]=*buf;   buf++;   }l = strlen(Buffer); p=0;     while(l) {           if(!WriteFile(idComDev, &Buffer[p], l, &n, NULL)) {      	 err = GetLastError();      	 if(err != ERROR_IO_PENDING) {      	    Comunicacion = 0;            return;      	 }      }      l--;      p++;   }}DWORD Hilo(LPDWORD lpdwParam){   DWORD dwEvtMask;
   do {      if(WaitCommEvent(idComDev, &dwEvtMask, NULL))         if(dwEvtMask & EV_RXCHAR) LeeSerie();   } while(1);   return 0;} 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130430/400bef5b/attachment.html>


Más información sobre la lista de distribución Cconclase