Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C] Lettura input non bloccate

    Sapete se esiste una funzione per la lettura dell'input non bloccante?

  2. #2
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    cioè mentre tu scrivi manda direttamente in output il testo?
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  3. #3
    [ per DOS /WIN non standard vedi di includere conio.c al posto di conio.h se non funziona]
    #include <stdio.h>
    #include <conio.h>

    int main (void) {
    while (0x01) {
    if (! (getch ()))
    if (getch () == 0x3f)
    printf("Hai premuto il tasto F5.");
    }
    return (0x0);
    }
    [PER DOS TC usando ASM ]
    char readkey(){
    char ris;
    asm{
    move ah,0x00
    int 0x16
    mov [ris],al
    }
    return ris;
    }
    [sotto linux]
    utilizza la term2_0.h
    http://forum.html.it/forum/showthrea...hreadid=655927

  4. #4

    Re: [C] Lettura input non bloccate

    Originariamente inviato da Jack.cpp
    Sapete se esiste una funzione per la lettura dell'input non bloccante?
    Non in C standard che io sappia, occorre usare le funzioni native dell'OS. Su piattaforme POSIX, dovresti cavartela con fcntl e O_NONBLOCK (se ben ricordo)
    "Qualsiasi esperto ha paura di combattere usando la katana vera. Anch'io. Ma non ignoro la mia paura, riesco ad accettarla, e a metterla da parte accanto a me".

  5. #5

    Re: Re: [C] Lettura input non bloccate

    Originariamente inviato da Ikitt
    Non in C standard che io sappia, occorre usare le funzioni native dell'OS. Su piattaforme POSIX, dovresti cavartela con fcntl e O_NONBLOCK (se ben ricordo)
    la libreria che ho linkato alla fine utilizza lo standard POSIX
    (almeno credo, ormai sono passati 2 anni da quando l'ho scritta)

  6. #6
    Originariamente inviato da kentaromiura
    [ per DOS /WIN non standard vedi di includere conio.c al posto di conio.h se non funziona]
    codice:
    #include <stdio.h>
    #include <conio.h>
    
    int main (void) {
       while (0x01) {
           if (! (getch ()))
               if (getch () == 0x3f)
                  printf("Hai premuto il tasto F5.");
    
           printf("Input non bloccato!\n");
       }
       return (0x0);   
    }
    se non premi nulla la printf non verrà mai eseguita, ergo: l'input è bloccato

    Ma forse ho capito male io...

    con le API (GetKeyState) risolvi in ogni caso
    (prova a premere anche contemporaneamente freccette+barra):
    codice:
    #include <stdio.h>
    #include <windows.h>
    
    int main()
    {
    
        while(1)
        {
            if (GetKeyState (VK_LEFT) < 0)
                printf("LEFT\n") ;
            if (GetKeyState (VK_RIGHT) < 0)
                printf("RIGHT\n");
            if (GetKeyState (VK_DOWN) < 0)
                printf("DOWN\n");
            if (GetKeyState (VK_UP) < 0)
                printf("UP\n");
            if (GetKeyState (VK_SPACE) < 0)
                printf("SPACE\n");
            if (GetKeyState (VK_ESCAPE) < 0)
                break;
            Sleep(100);
            
            printf("Input non bloccato\n");
                
        }
    
        return 0;    
    }
    ...Terrible warlords, good warlords, and an english song

  7. #7
    Originariamente inviato da Johnny_Depp
    se non premi nulla la printf non verrà mai eseguita, ergo: l'input è bloccato

    Ma forse ho capito male io...
    no, l'output e' bloccato
    l'input no..
    metti che vuoi fare un gioco, gestisci tutto in un ciclo
    mica premi sempre i tasti, ma quando li premi l'omino si muove ?
    no?

    comunque ho cercato di dare diverse soluzioni,
    mancava giusto la versione API Windows

    :master:

  8. #8
    Originariamente inviato da kentaromiura
    metti che vuoi fare un gioco, gestisci tutto in un ciclo
    mica premi sempre i tasti, ma quando li premi l'omino si muove ?
    no?
    Sì, Sì...

    e se non premi alcun tasto il resto del ciclo resta bloccato! (se non muovi l'omino le navicelle nemiche non si muovono)

    p.s. il tuo codice è utile per catturare il "doppio" output restituito dai tasti speciali... F1, F2, F3, etc
    ...Terrible warlords, good warlords, and an english song

  9. #9
    Originariamente inviato da Johnny_Depp
    Sì, Sì...

    e se non premi alcun tasto il resto del ciclo resta bloccato! (se non muovi l'omino le navicelle nemiche non si muovono)

    p.s. il tuo codice è utile per catturare il "doppio" output restituito dai tasti speciali... F1, F2, F3, etc
    'azz
    ora ho visto..
    invece della prima if(!getch())
    bisogna usare kbhit()
    che ritorna 0 se non e' stato premuto nulla
    while(!kbhit()) //finche non viene premuto nulla
    scusa dormo troppo poco ultimamente..



    ..
    comunque sconsiglio vivamente la conio, meglio utilizzare le API o LA libreria POSIX ..
    l'altra funzione assembly l'ho inclusa solo per conoscenza.

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.