Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420

    getchar impazzita oO

    Salve,
    questa getchar si comporta in modo molto molto molto anomalo. In pratica è non bloccante anche se io non ho fatto nulla per far si che lo fosse..
    Ho provato pure a mettere fflush(stdin) all'inizio ma niente da fare



    codice:
    /* Freccia sinsitra */
    #define SINISTRA 68 
    
    /* Freccia destra */
    #define DESTRA 67
    
    /* Tasto per uscire dal gioco*/
    #define TASTO_USCITA 113
    
    //fflush(stdin);
    c=getchar();
    //if (c==0) c=getchar();
    
    switch(c)
    			{	
    				 
    
    				case TASTO_USCITA:
    					/*scrivi sul buffer (accedendo tramite l'opportuno mutex e verificando se vi
    					siano posizioni disponibili per la scrittura)relativo alla comunicazione con
    					controllo i dati che indicano che il giocatore ha scelto di uscire dal
    					gioco*/
    					pos_niente.tipo = USCITA;
    				
    
    					 
    					in_esecuzione = false;/*esci dal ciclo esterno e quindi fai finire il thread*/
    									
    					break;
    
    				/*se si preme la freccia sinistra la nave si sposta a sinistra*/	
    				case SINISTRA:
    					
    					/*se la nave è in una posizione dello schermo dove può stare*/
    					if(pos_nave.x > DISTANZA_DAI_LATI)
    						pos_nave.x -= SPOSTAMENTO_NAVE; /*sposta a sinistra la nave*/
    						
    						scrivi_su_buffer(pos_nave); 
    
    					break;
    				/*se si preme la freccia destra la nave si sposta a destra*/
    				case DESTRA:
    					/*se la nave è in una posizione dello schermo dove può stare*/
    					if(pos_nave.x < MAXX-DISTANZA_DAI_LATI)
    						pos_nave.x += SPOSTAMENTO_NAVE;/*sposta a destra la nave*/
    						
    					scrivi_su_buffer(pos_nave); 
    
    					break;
    				//default:
    				//sleep(1);
    				//pos_nave.x -= SPOSTAMENTO_NAVE;
    				 
    			}
    Qualcuno ha idea da cosa possa dipendere?
    the sALIEN

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Forse dico una castronata, ma se stai usando il multithreading, lo strano comportamento può dipendere dal fatto che devi sincronizzare l'accesso alla getchar() visto che legge un carattere dallo standard input (in questo caso è la tastiera) che è singolo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    sto usando piu' processi, non so' se la cosa valga. In ogni caso ho sostituito getch a getchar ed ora ho risolto i problemi. Resta il fatto pero' che avrebbe dovuto funzionare anche cosi'... boh misteri del C VVoVe:
    the sALIEN

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: getchar impazzita oO

    Originariamente inviato da thesalien
    questa getchar si comporta in modo molto molto molto anomalo. In pratica è non bloccante anche se io non ho fatto nulla per far si che lo fosse..
    Ho provato pure a mettere fflush(stdin) all'inizio ma niente da fare
    Tieni presente che:
    a) getchar() è "bufferizzata" (come le altre funzioni di I/O standard) e ritorna il carattere solo dopo aver premuto invio.
    b) getchar() non è in grado di leggere i tasti speciali (Fxx, frecce, ecc...).
    c) Fare fflush(stdin) non ha senso e non serve, fflush è adatta solo per stream di output. Il comportamento non è definito/stabilito per stream di input.
    d) Se vuoi fare letture "dirette" (non bufferizzate), usa getch() (nota, non è standard) che è in grado di leggere anche i tasti speciali tramite una sequenza di 2 codici (il primo può essere 0 o 224).
    e) Se vuoi maggior controllo, usa le API del sistema (su Windows le API Win32 per la gestione della console).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    A me interessavano proprio le frecce ed altri tasti quindi credo proprio che la soluzione migliore sia proprio la getch().

    grazie mille per le delucidazioni
    the sALIEN

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.