Eseguire una funzione alla pressione di un tasto

di il
4 risposte

Eseguire una funzione alla pressione di un tasto

Salve a tutti
in un generico programma come faccio a scrivere nel programma che quando l'utente preme il tasto speciale che ho scelto verrà visualizzata una classifica?

Edit skynet: Modifica titolo

4 Risposte

  • Re: Eseguire una funzione alla pressione di un tasto

    Bisogna dare maggiori indicazioni perché "generico programma" non dice molto.

    Stai parlando di un programma console o con GUI grafica?

    P.S. Non è che il titolo che hai scelto aiuti molto ...
  • Re: Eseguire una funzione alla pressione di un tasto

    Salve
    Scusami hai ragione, questo è il mio programma :
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include "tipodati.h"
    #include "liste.h"
    #include<time.h>
    #include<memory.h>
    
    int LeggiFile(char*nomeFile, SNodo**p,SNodo*r);
    void Stampa();
    
    
    
    SNodo* p;
    SNodo* n;
    SNodo* cor;
    SNodo* rit;
    SNodo* u;
    void main (void)
    {
    	char ch;
    	srand( (unsigned)time( NULL ) );	
    	LeggiFile("concorrenti.txt",&p,&rit);
    	printf("1^ manche\n\n");
    	while(p)
    	{
    		ch=_getch();
    		n=EstraiTesta(&p);
    		Stampa();
    	}
    
    	printf("\n\n");
    	printf("I concorrenti eliminati sono: \n\n");
    	n = rit;
    	while(n)
    	{
    		Stampa();
    		n = n->next;
    	}
    	system("pause");
    }
    
    int LeggiFile(char*nomeFile, SNodo**p, SNodo**rit)
    {
    	SInfo x;
    	FILE*f;
    	int k;
    	SNodo* app;
    	f= fopen(nomeFile,"r");
    
    	if(f==NULL)
    		return 0;
    
    	*p=0;
    	*rit=0;
    	app=0;
    	while((k = fscanf(f, "%i,%[^,],%i,%s", &x.n_pet, x.nome, &x.anno, x.naz))>0)
    	{
    		x.tempo=6000+(6000*rand()/RAND_MAX);
    		app = (SNodo*) malloc (sizeof(SNodo));
    		app->tempo.min = x.tempo/6000;
    		app->tempo.sec = (x.tempo-6000)/100;
    		app->tempo.cent = (x.tempo-6000)%100;
    		n = (SNodo*) malloc (sizeof(SNodo));
    		n->info=x;
    		app->info = x;
    		n->tempo.min = x.tempo/6000;
    		n->tempo.sec = (x.tempo-6000)/100;
    		n->tempo.cent = (x.tempo-6000)%100;
    
    		if(app->info.tempo > 10000)
    			InsOrdinato(rit,app);
    
    		InsOrdinato(p, n);
    	}
    
    	fclose(f);
    	return 1;
    }
    
    
    
    void Stampa()
    {
    	printf("%3i %-24s %4i %s ", n->info.n_pet, n->info.nome, n->info.anno, n->info.naz);
    		printf("0%i : ",n->tempo.min);
    		if(n->tempo.sec <= 9)
    			printf("0%i : ",n->tempo.sec);
    		else
    			printf("%i : ",n->tempo.sec);
    
    
    		if(n->tempo.cent <= 9)
    			printf("0%i \n",n->tempo.cent);
    		else
    			printf("%i \n",n->tempo.cent);
    }
    in pratica devo trovare un modo per il quale quando l'utente preme un tasto (che io gli dirò qual'è) in un qualsiasi momento dell'esecuzione gli farà visualizzare la classifica (in questo caso è la classifica).
  • Re: Eseguire una funzione alla pressione di un tasto

    Innanzitutto, devi dichiarare una variabile di tipo char per contenere il comando inserito da tastiera. Poi, devi inserire un ciclo che legge continuamente il comando da tastiera e, all'interno del ciclo, controllare quando l'utente inserisce il carattere/comando di interesse. Per esempio, se il comando è 'l', potresti fare così::
    
    	char comando;
    	printf("\npremi comando -->");
    	comando = getch();
    	while (comando != 'q') {
    		  if (comando=='l') {
    	               // fai quello che devi fare qui
    	          }
                printf("\npremi comando -->");
    	    comando = getch();
    	}
    
    Nota che ho aggiunto il comando 'q', se l'utente preme il tasto 'q' si esce dal ciclo e, forse, se vuoi, anche dal tuo programma.
    Quando i comandi aumenteranno ti consiglio di usare una struttura case-switch per analizzare tutti i possibili comandi.
    Ciao.
  • Re: Eseguire una funzione alla pressione di un tasto

    Grazie mille per la risposta!
Devi accedere o registrarti per scrivere nel forum
4 risposte