Pubblicita'
Scanset in C
-

Lo scanset è un particolare specificatore di formato che posseggono le funzioni della serie scanf.
Uno scanset è una sorta di filtro che permette di acquisire solo i caratteri interessati e assegnarli al corrispondente vettore di caratteri.
E’ formato da tutti i caratteri posti fra parentesi quadre precedute da un segno di percentuale, per esempio:scanf("%[bnmf]", dati); /* Filtra le lettere minuscole b n m f */
scanf("%[ABCF]", dati); /* Filtra le lettere maiuscole A B C F */
scanf("%[0123]", dati); /* Filtra i caratteri numerici 0 1 2 3 */La funzione scanf continuerà a leggere i caratteri specificati nello scanset finchè non si incontra un carattere diverso da essi.
E’ possibile specificare un intervallo di caratteri tramite il trattino di unione ” – ” :
scanf("%[a-z]", dati); /* Filtra tutte le lettere minuscole */
scanf("%[A-Z]", dati); /* Filtra tutte le lettere maiuscole */
scanf("%[0-9]", dati); /* Filtra tutti i caratteri numerici */
In questo caso, la funzione scanf continuerà a leggere finchè non si incontra un carattere che non è compreso nell’intervallo specificato.
Allo stesso modo è possibile definire più intervalli nello stesso scanset:
scanf("%[a-z A-Z]", dati); /* Filtra lettere minuscole e maiuscole */
scanf("%[a-z 0-9]", dati); /* Filtra lettere minuscole e caratteri numerici*/
La condizione dello scanset si può negare utilizzando l’apposito segno ” ^ ” prima della condizione fra parentesi quadre:
scanf("%[^abc]", dati); /* Non filtra le minuscole a b c */
scanf("%[^A-Z]", dati); /* Non filtra tutte le lettere maiuscole*/
In questo caso, lo scanset filtrerà tutti i caratteri finchè non verrà inserito un carattere fra quelli nella condizione dopo lo ” ^ ” .
I caratteri immessi e non previsti dallo scanset, rimangono nello stdin (per la scanf) e saranno interpretati come dati di ingresso al momento della successiva acquisizione.
Questo comportamento può creare dei problemi non di poco conto, e per evitarli bisogna svuotare il buffer di lettura (stdin, in questo caso), utilizzando la funzione fflush.
Ecco un esempio completo:#include <stdio.h>
void main()
{
char nome[50], data[20];
printf("Inserisci nome e cognome: ");
scanf("%[a-z A-Z]", nome); /* Filtra lettere maiuscole e minuscole */
fflush(stdin);
printf("Inserisci data di nascita: ");
scanf("%[0-9 -/._ ]", data); /* Filtra caratteri numerici e punteggiatura - / . _ */
fflush(stdin);
printf("%s e' nato il %s", nome, data);
}
Vuoi tutti gli aggiornamenti di IbA's Blog in tempo reale? Abbonati ai nostri Feed RSS.


Loading...
















Commenti recenti