Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: [C++] funzione kbhit

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    [C++] funzione kbhit

    ciao a tutti!!! vi ringrazio per avermi aiutato e a capire questa funzione nel mio precedente post.. però ho ancora un altro dubbio.. siccome l'altra volta avevamo fatto degli esempi in cui si premeva un solo tasto ora ho provato a farlo con due tasti..
    se schiaccio 's' non da problemi ma se schiaccio 'z' spesso non va e devo schiacciarlo più volte.. ho notato anche che se metto un valore più alto nello Sleep() funziona pure meno.. come faccio a far si che stampi sempre nulla all'infinito a meno che non premo 's' o 'z' e allora li deve stampare le relative lettere.. grazie
    codice:
    #include<ctime>
    #include<stdio.h>
    using namespace std;
    main()
    {
            int i;
            while(1)
            {
                    if (!kbhit())
                            printf("nulla ");
                    if (kbhit())
                    {
                            if(getch()=='s')
                            {
                                    printf("s ");
                            }
                    }
                    if (kbhit())
                    {
                            if(getch()=='z')
                            {
                                    printf("z ");
                            }
                    }
                    Sleep(500);
            }
    getch();
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465

    Re: [C++] funzione kbhit

    Io cambierei intanto il codice cosi' ...

    codice:
                    if (kbhit())
                    {
                            int ch = getch();
    
                            if(ch=='s')
                            {
                                    printf("s ");
                            }
    
                            if(ch()=='z')
                            {
                                    printf("z ");
                            }
                    }
                    else
                        printf("nulla ");
    Inoltre, devi usare una Sleep molto piu' breve, diciamo Sleep(20); e poi gestire il ritardo dei 500 millisecondi contando 25 passaggi dal ciclo tramite una variabile contatore ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Re: Re: [C++] funzione kbhit

    Una correzione al codice di oregon, prima che l'autore lo provi e posti perchè non compila...

    Originariamente inviato da oregon
    Io cambierei intanto il codice cosi' ...

    codice:
                    if (kbhit())
                    {
                            int ch = getch();
    
                            if(ch=='s')
                            {
                                    printf("s ");
                            }
    
                            if(ch == 'z')
                            {
                                    printf("z ");
                            }
                    }
                    else
                        printf("nulla ");
    Inoltre, devi usare una Sleep molto piu' breve, diciamo Sleep(20); e poi gestire il ritardo dei 500 millisecondi contando 25 passaggi dal ciclo tramite una variabile contatore ...
    C'era scritto
    codice:
    if (ch() == 'z')
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    ghyeah perfetto!!! perfetto

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465

    Re: Re: Re: [C++] funzione kbhit

    Originariamente inviato da LeleFT
    Una correzione
    Giusto ... problema di copia incolla tra ch e getch() ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    ho un altro problema... ho modificato il programma precedente per far si che all'inizio scrivi nulla poi appena si preme 's' stampi 's' all'infinito finche non si schiaccia 'z' e allora stamperà 'z' all'infinito... mi date un consiglio per metterlo a posto.. grazie infinite
    codice:
    #include<conio.h>
    #include<iostream.h>
    #include<windows.h>
    #include<ctime>
    #include<stdio.h>
    using namespace std;
    main()
    {
            int i, zz=0;
            while(1)
            {
                    if(!kbhit()&&zz!=1)
                            printf("nulla ");
                    if (kbhit()||zz==1)
                    {
                            int ch = getch();
                            if(ch=='m')
                                    ;
                            ch='s';
                            if(ch=='s')
                            {
                                    for(i=0;i!=-1;i++)
                                    {
                                            printf("s ");
                                            Sleep(100);
                                            if(kbhit())
                                            {
                                                    int ch = getch();
                                                    if(ch=='z')
                                                            i=-2;
                                            }
                                    }
                            }
                            zz=0;
                            ch='z';
                            if(ch=='z')
                            {
                                    for(i=0;i!=-1;i++)
                                    {
                                            printf("z ");
                                            Sleep(100);
                                            if(kbhit())
                                            {
                                                    int ch = getch();
                                                    if(ch=='s')
                                                    {
                                                            i=-2;
                                                            zz=1;
                                                    }
                                            }
                                    }
                            }
                    }
                    Sleep(500);
            }
    getch();
    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non puoi dire di "metterlo a posto" ...

    Indica cosa non va e cosa hai pensato di fare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    è.. deve stampare infinite volte nulla ma se si preme 's' mostra 's' infinite volte se si preme 'z' mostra 'z' infinite vole e se si ripreme 's' mostra s e così via.. ho provato a vedere e fa 'nulla' finche non premo 's' poi mostra 's' se premo 'z' funziona ma per mostrare di nuovo 's' infinite volte devo premere 2 volte invece voglio che vadi anche se s preme solo una volta.. grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    non c'è proprio modo di farlo così?

  10. #10
    Credo che 57 righe di codice siano troppe per risolvere una "problema" simile
    codice:
    #include <iostream>
    #include <windows.h>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
    	char str[6]="nulla";
    	do
    	{
    		if( kbhit() )
    		{
    			str[0] = getch();
    			str[1]=0;
    		}
    		printf("%s ", str);
    		Sleep(500);
    	}
    	while( str[0]!=27 );
    	return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.