PDA

Visualizza versione completa : Blocco caratteri e controllo ------> C


NS-1
15-07-2004, 13.17.47
Ciao,

in C vorrei, dopo aver chiesto in input una stringa, avere il controllo "istantaneo" di ciò che viene digitato sulla tastiera! :eek:

nello specifico, vorrei stampare a video solo un determinato carattere, tutti gli altri digitati dovrebbero essere scartati e non mandati in output...

es: (voglio che stampi solo la 'X') l'utente appena digita una qualsiasi lettera diversa da 'X' non viene stampata. Quindi scrivendo TAXI, uscirebbe solo X...

P8257 WebMaster
15-07-2004, 13.30.31
Acquisisci l'input carattere per carattere e stampi solo i caratteri compresi in un certo range .. oppure costruisci un'array parallela dei caratteri da stampare che scansioni ad ogni ciclo di passaggio.. se vuoi uno spunto, guarda la mia implementazione della PosizioneNavi() nel thread della battaglia navale, in quella funzione sono stampati e consentiti solo i caratteri validi...

Bye :cool:

P.S.: più tardi rispondo al tuo pvt. ;)

NS-1
15-07-2004, 13.40.57
;) (Y):p

NS-1
15-07-2004, 13.48.31
.

LoryOne
15-07-2004, 14.21.09
Già.
Attento che se usi getch(), per evitare che vengano considerati anche i tasti funzione, devi utilizzare kbhit().
Ricordati inoltre di scaricare (flush) il buffer della tastiera (fflush(stdin)) prima di eseguire un'altro getch() ;)

NS-1
15-07-2004, 16.30.48
non è che potreste scrivermi 2 righe di codice? :D

NS-1
15-07-2004, 16.44.28
forse mi sono spiegato male oppure non ho capito niente io...
ciò che digita l'utente non deve comparire sullo schermo se non fà parte del range di caratteri scelti da me...

ok?

P8257 WebMaster
15-07-2004, 17.15.38
Ecco qui:


#include <stdio.h>
#include <windows.h>
#include <conio.h>

int main(void)
{
BOOL EndInput = TRUE;
unsigned int Count;
int Count2=0;
char Allowed[] = {'a', 'b', 'c', 'd', 'e'};
char Buff[1000];
char Current = ' ';
Buff[0] = '\0';


// L'utente può inserire solo: a,b,c,d,e - invio: termina l'input
while( EndInput)
{
Current = getch();
switch(Current)
{
case 13: EndInput = FALSE;
Buff[Count2] = '\0';
printf("\nStringa inserita: %s\n", Buff);
break;

default: for(Count=0;Count<strlen(Allowed);Count++)
{
if(Current == Allowed[Count])
{
printf("%c", Current);
Buff[Count2] = Current;
Count2++;
}
}
break;

}
}
return 0;
}



Questo pezzo di codice visualizza e memorizza in un buffer (che può essere poi gestito e restituito) solo i caratteri inseriti dall'utente che corrispondono al range che decidi di dare in "Allowed". Non penso ci siano commenti da fare riguardo al codice .. forse può essere ottimizzata ancora, ma direi che così può anche andare ;)

Bye :cool:

NS-1
15-07-2004, 18.37.08
(Y) ;) :inn: (D) (B) :p :) (F) :D

grazie....

NS-1
16-07-2004, 12.06.08
era tutto in questa funzione la soluzione:

int _getch( void );
Get a character from the console without echo

..ma porc******
:wall: