Eseguire una funzione alla pressione di un tasto

di Anonimizzato11292 il
4 risposte
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

  • 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 ...
  • 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).
  • 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.
  • Grazie mille per la risposta!
Devi accedere o registrarti per scrivere nel forum
4 risposte