Torna indietro   Hardware Upgrade Forum > Software > Programmazione

KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo
KTC lancia il nuovo monitor gaming H27E6, un modello da 27 pollici che promette prestazioni estreme grazie al pannello Fast IPS con risoluzione 2K QHD (2560x1440). Il monitor si posiziona come una scelta cruciale per gli appassionati di eSport e i professionisti creativi, combinando una frequenza di aggiornamento di 300Hz e un tempo di risposta di 1ms con un'eccezionale fedeltà cromatica
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-04-2007, 18:00   #1
australopiteci
Member
 
Iscritto dal: Feb 2005
Messaggi: 127
[C] getch che non blocca

Salve a tutti, non capisco per quale motivo questa getch sia non bloccante e tutti i valori vadano a finire sul case default. Ora incollo la parte del codice interessata.

Codice:
while (in_esecuzione)
	{	
	
	
		//pos_nave.x += SPOSTAMENTO_NAVE; /*sposta a sinistra la nave*/
		pos_nave.vita +=1;
	
		
		/*invia il dato alla funzione controllo  i dati che indicano la nuova posizione della nave*/
		scrivi_su_buffer(pos_nave); 
		
		//fflush(stdin);
		
		/* input da tastiera*/
		fflush(stdin);
			switch(c = getch())
			{	
				 

				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;
				 
			}

	}
Ho provato anche ad usare fflush ma il problema rimane..
__________________
the AUSTRALOPITECI
australopiteci è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2007, 18:16   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da australopiteci Guarda i messaggi
Salve a tutti, non capisco per quale motivo questa getch sia non bloccante e tutti i valori vadano a finire sul case default.
getch() è bloccante. Inoltre fflush(stdin) non serve a nulla e come ho già detto molte altre volte, lo standard prevede che fflush sia usato con stream di output (con stream di input il comportamento non è predefinito, ma con certi compilatori funziona).

Piuttosto le costanti SINISTRA/DESTRA sono per le frecce della tastiera??? I tasti "speciali" (Fxx, frecce, page up/down, ecc...) vengono ottenuti tramite una sequenza di 2 codici, il cui primo valore è 0 oppure 224 e il secondo un codice particolare. Quindi serve una sequenza di 2 getch() per usare tali tasti.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2007, 18:49   #3
australopiteci
Member
 
Iscritto dal: Feb 2005
Messaggi: 127
si esatto sono le frecce direzionali. Il fatto è che pero' va sempre nel case di default senza premere nessun tasto. Sto debuggando e mi sa proprio che la getch ritorna un -1 quindi c'è un errore ma mi sembra giustissimo il codice...
__________________
the AUSTRALOPITECI
australopiteci è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2007, 20:38   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da australopiteci Guarda i messaggi
si esatto sono le frecce direzionali.
Ripeto che per i tasti speciali c'è una sequenza particolare composta da 2 codici, quindi un modo corretto di gestire tali tasti è il seguente:
Codice:
#include <stdio.h>
#include <conio.h>

int main (void)
{
    int ch, end = 0;

    while (!end)
    {
        ch = getch ();

        switch (ch)
        {
            case 0x00:
            case 0xE0:
                ch = getch ();

                switch (ch)
                {
                    case 0x4B:
                        printf ("Freccia sinistra\n");
                        break;
                    case 0x4D:
                        printf ("Freccia destra\n");
                        break;
                }
                break;

            case 0x1B:    /* ESC */
                printf ("ESC\n");
                end = 1;
                break;
        }
    }

    return 0;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
Il primo sconto in assoluto di iPhone 17...
Mini Aspirapolvere 4 in 1 da 26.000Pa: l...
Google punirà le app che consuman...
Cina: emissioni di CO2 stabili o in calo...
Ritorna la migliore offerta di ho. Mobil...
21 offerte Amazon Black Friday vere: rob...
Tesla crolla in Cina: ottobre è s...
Sovranità digitale per l'UE: arri...
Costa la metà ed è pi&ugra...
Wikipedia tira le orecchie all'AI: "...
Oggi su Amazon Haul sconto lampo di 11€!...
Firefox 145 è l'ultima versione p...
La nuova tasca Apple per trasportare gli...
Nital porta in Italia la pulizia del fut...
Scende anche il portatile tuttofare defi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:44.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v