Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-08-2012, 22:24   #1
neski
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 29
if e cin con invio,frecce,canc,esc,..ecc..

Ciao a tutti mi scuso per il titolo strano ma non sapevo bene che titolo mettere perchè è una cosa un po' complicata da spiegare..visto che non sono bravo a spiegarmi vi faccio un esempio che così riesco a farmi capire meglio..io per esempio scrivo un programma che chieda se si vuole continuare o no.. naturalmente dovrò dichiarare la variabile risposta ci metterò cin >>risposta e infine metterò if che praticamente se l'utente inserirà s il porgramma continuerà se invece inserirà n il programma si chiuderà..se invece io volessi far inserire all'utente le frecce direzionali (cioè freccia su,in basso,sinistra e destra) o invio,canc (questi tasti diversi) ecc..come lo dovrei formulare con cin e if? perchè nell'esempio precedente avrei messo if (risposta =='s') quindi se l'utente metteva s il programma sarebbe continuato ma il problema che volevo utilizzare (per altri tipi di programmi) i tasti che avevo elencato prima ma non so come fare per farli inserire dal cine e per poi eleborare un if..scusate se mi sono spiegato malissimo ma non sapevo bene come spiegarvi...se avete delle domande fatemele pure per magari chiarire meglio.. vi ringrazio in anticipo per la vostra disponibilità..attendo una vostra risposta
neski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 00:55   #2
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Non so se esistono librerie che incapsulano il tutto per il sistema da te usato (su windows la conio.h può aiutare anche se non l'ho mai utilizzata per questo compito preciso quindi non ti assicuro nulla) ma una simile funzionalità è possibile solo appoggiandosi alle api di sistema.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 10:20   #3
neski
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 29
Quote:
Originariamente inviato da [Kendall] Guarda i messaggi
Non so se esistono librerie che incapsulano il tutto per il sistema da te usato (su windows la conio.h può aiutare anche se non l'ho mai utilizzata per questo compito preciso quindi non ti assicuro nulla) ma una simile funzionalità è possibile solo appoggiandosi alle api di sistema.
mi sapresti indicare un link dove lo spiega?
neski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 12:20   #4
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Puoi usare cin.get, però considera che la funzione ritorna appena ha letto un carattere dallo stream d'input.
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 13:23   #5
neski
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 29
Quote:
Originariamente inviato da pabloski Guarda i messaggi
Puoi usare cin.get, però considera che la funzione ritorna appena ha letto un carattere dallo stream d'input.
alternative?nessuno?
neski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 13:34   #6
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da neski Guarda i messaggi
mi sapresti indicare un link dove lo spiega?
Prova a leggere questo link, credo ci siano informazioni interessanti.

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Il problema legato all'input tramite console è che la pressione di un tasto qualsiasi genera un evento di sistema. Tale evento viene processato, se previsto dall'applicazione del caso, ma qui si entra in una sfera della programmazione per nulla banale. Nel tuo caso particolare bisogna vedere come l'applicazione "prompt dei comandi" processa i vari segnali derivanti dalla pressione dei tasti.

Sinceramente però le applicazioni che ho realizzato nel tempo, e che richiedevano un intervento dall'utente, sono state per la maggior parte basate su interfaccia grafica dove il concetto di programmazione ad eventi è alla base di tutto e dove simili problemi sono gestiti in maniera ben più efficace dai vari framework. Pertanto sono entrato ben poco nel dettaglio dell'input tramite console di comando.

Ti ripeto però che l'intercettare eventi di sistema è una questione per nulla banale e che appunto richiede una certa pratica nel sistema operativo e nelle relative api. Forse nel link che ti ho passato potresti trovare qualcosa di interessante.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 13:47   #7
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da neski Guarda i messaggi
alternative?nessuno?
Il problema è che la console non rileva la pressione, per esempio, del tasto esc. Nel senso che non ti restituisce nulla a schermo e pertanto il buffer non si riempie.
Banalmente facendo un:

Codice:
#include <iostream>

using namespace std;

int main()
{
    char carattere;
    cin >> carattere;
    while (true) {
        if (carattere == 27) {
        cout << "Premuto esc!!";
        }
    }
}
Vedrai che anche se premi il tasto ESC non avrai alcun effetto. Il buffer non si riempie e premendo l'enter semplicemente non succederà nulla. Segno per l'appunto che la console non passa al buffer il tasto ESC.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 14:15   #8
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da neski Guarda i messaggi
alternative?nessuno?
In maniera portabile, senza dover prendere return, no.

Sotto windows puoi usare conio, la funzione _getch. Sotto linux puoi fare così

Codice:
int getch( ) {
  struct termios oldt,
                 newt;
  int            ch;
  tcgetattr( STDIN_FILENO, &oldt );
  newt = oldt;
  newt.c_lflag &= ~( ICANON | ECHO );
  tcsetattr( STDIN_FILENO, TCSANOW, &newt );
  ch = getchar();
  tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
  return ch;
}
p.s. ovviamente i metodi descritti non fanno parte del c++ standard

Ultima modifica di pabloski : 04-08-2012 alle 14:28.
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 14:25   #9
neski
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 29
Quote:
Originariamente inviato da pabloski Guarda i messaggi
Dipende a te che cosa serve.

Se ti serve poter leggere ogni tasto premuto, quella è la strada più logica, semplice e standard.
no a me serve che il programma prenda questi tasti e a seconda del tasto if esegua un azione esempio:

cout<<"Dove vuoi andare?"
cin>>tasto;
if(tasto== tasto INVIO){

cout<<"Ok stai fermo"}
if(tasto==TASTO FRECCIA DESTRA){

cout<<"Vai a destra";
}
if(tasto== TASTO FRECCIA SINISTERA){

cout<<""vai a sinistra";}


ecc.

anche con i tasti canc ed esc...
scusate ancora se mi sto spiegando male

ah scusate non avevo ricaricato la pagina e quindi non ho letto comunque io lavoro su windows e non saprei come fare con conio,ora do un occhiata al link

Ultima modifica di neski : 04-08-2012 alle 14:30.
neski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 14:39   #10
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Se è sotto windows è banale. Guarda qua http://msdn.microsoft.com/en-us/libr...(v=vs.71).aspx

Semplicemente includi conio.h e usi la funzione _getch. Le uniche cose da tener presente sono:

1. non puoi leggere il carattere CTRL+C ( perchè viene usato per stoppare i programmi cli )
2. i tasti funzione restituiscono 0 alla prima lettura e bisogna leggere una seconda volta per ottenere il codice del tasto
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 20:23   #11
neski
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 29
Quote:
Originariamente inviato da pabloski Guarda i messaggi
Se è sotto windows è banale. Guarda qua http://msdn.microsoft.com/en-us/libr...(v=vs.71).aspx

Semplicemente includi conio.h e usi la funzione _getch. Le uniche cose da tener presente sono:

1. non puoi leggere il carattere CTRL+C ( perchè viene usato per stoppare i programmi cli )
2. i tasti funzione restituiscono 0 alla prima lettura e bisogna leggere una seconda volta per ottenere il codice del tasto
ma non so come risolvere con if
neski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 20:30   #12
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da neski Guarda i messaggi
ma non so come risolvere con if
metti un ciclo while, dentro il _getch e subito dopo gli if che ti servono
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 20:39   #13
neski
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 29
Quote:
Originariamente inviato da pabloski Guarda i messaggi
metti un ciclo while, dentro il _getch e subito dopo gli if che ti servono
un esempio?scusate ma non riesco a capire come fare
neski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 21:36   #14
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da neski Guarda i messaggi
un esempio?scusate ma non riesco a capire come fare
nella pagina che ho linkato c'è proprio l'esempio di cui parlavo
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 21:58   #15
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12901
Se sei sotto Linux puoi provare le librerie ncurses.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 22:30   #16
neski
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 29
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Se sei sotto Linux puoi provare le librerie ncurses.
sono sotto windows
neski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 22:42   #17
neski
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 29
Quote:
Originariamente inviato da pabloski Guarda i messaggi
nella pagina che ho linkato c'è proprio l'esempio di cui parlavo
a nel esempio non mettono un if per il tasto invio o frecce
neski è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2012, 22:53   #18
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da neski Guarda i messaggi
a nel esempio non mettono un if per il tasto invio o frecce
Ovviamente l'esempio è per dare un'idea. Un esempio che riconosce i tasti direzionali è questo

Codice:
switch (_getch()) 
  {
  case 0:
  case 224:
    switch (_getch())
      {
      case 72: /* su */ break;
      case 75: /* sinistra */ break;
      case 77: /* destra */ break;
      case 80: /* giù */ break;
      }
    break;

  }
Pensa sia autoesplicativo. Comunque sia il primo _getch legge il codice del tasto premuto. I tasti funzione restituiscono o 0 o 224 e necessitano di una nuova lettura per ottenere il codice del tasto ( il secondo _getch ).

Ultima modifica di pabloski : 04-08-2012 alle 22:57.
pabloski è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
DAZN lancia la sua offerta di Natale: My...
Gigabyte fa marcia indietro? Sparito il ...
Alcuni rivenditori giapponesi bloccano l...
Le feste non placano Amazon, anzi: aggio...
Roborock Q10 S5+ a un super prezzo: robo...
Formula sceglie WINDTRE BUSINESS per gar...
EXPO 1.20: AMD migliora il supporto all'...
MacBook Pro con chip M4, 24GB di RAM e 1...
Lefant M330 da 6.000Pa a 139€ o ECOVACS ...
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: 02:23.


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