Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Libreria STRCONS

Libreria STRCONS

19440_size.png
La libreria STRCONS (per "stringa in console") intende essere un modo per rendere più comodo l'accesso all'input di stringhe da console, evitando di dover ogni volta reinventare la ruota per i soliti controlli di routine.

N.B. la versione della libreria scaricabile tramite il pulsante "Download" non è la più recente. E' preferibile copiare il codice accessibile per mezzo del pulsante "Sfoglia il sorgente".










Un modo molto comune per ricavare l’input dalla console del C è quello d’impiegare la funzione standard fgets(). Com’è noto, si tratta d’una funzione sicura ma con alcune particolarità che richiedono una certa attenzione.

1. Presenza o assenza di '\n' in coda alla stringa inserita nel buffer
La libreria STRCONS assicura che la stringa non termini mai con un carattere '\n', evitando la necessità di provvedere “manualmente” al controllo e all’eventuale eliminazione di un carattere '\n' indesiderato.

2. Caratteri “pendenti” nello stream stdin in caso di buffer troppo piccolo
La libreria STRCONS “svuota” automaticamente lo stream stdin, evitando il presentarsi dei classici problemi legati ai caratteri “pendenti” (particolarmente insidiosi quando si effettuano “manualmente” più chiamate successive a fgets). La libreria non fa ricorso a fflush() per ottenere lo scopo.

3. Ingombro e capacità del buffer
La libreria STRCONS alloca dinamicamente il proprio buffer (fino a un assurdo 4GB), permettendone il libero dimensionamento in fase di inizializzazione o con semplici chiamate ad una ed una sola funzione.

Usare STRCONS richiede pochi passaggi:


  • Inizializzazione della libreria con STRCONS_Inizializza() (volendo, è possibile inizializzare una sola volta la libreria all’inizio dell’esecuzione del proprio programma, mantenendola costantemente disponibile)

  • Richiesta di input con STRCONS_Chiedi() ogni qualvolta lo si ritenga necessario

  • Eventuale ridimensionamento del buffer, secondo necessità, con STRCONS_Dimensiona()

  • Eventuale richiesta di informazioni sullo stato della libreria con STRCONS_Capacita() (il numero massimo dei caratteri effettivamente contenibili dal buffer, carattere terminatore escluso) e STRCONS_Lunghezza() (la lunghezza della stringa correntemente presente nel buffer, carattere terminatore escluso)

  • Lettura diretta del contenuto del buffer con STRCONS_PStr() (il puntatore all’area di memoria riservata al buffer)

  • Eventuale conversione numerica della stringa contenuta nel buffer con STRCONS_Long(), STRCONS_UnsignedLong() e STRCONS_Double()

  • Eventuale richiesta della “traduzione” in una stringa descrittiva dei codici d’errore o di incongruenza malauguratamente riscontrati durante l’uso, con STRCONSErr_Descrizione()

  • Dismissione della libreria con STRCONS_Dismetti() (volendo, è possibile dismettere la libreria una sola volta prima dell’uscita dal proprio programma)



Un programma d’esempio:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>

  2. #include <stdlib.h>

  3. #include "stringa_console.h"

  4.  

  5. #define MAX_CARATTERI   7

  6.  

  7. void richiesta_input( void );

  8.  

  9. int main() {

  10.     // alloca il buffer e imposta di conseguenza le variabili statiche

  11.     int esito = STRCONS_Inizializza( MAX_CARATTERI );

  12.     if( esito == STRCONSErr_no_err ) richiesta_input();

  13.  

  14.     // triplica la capacita' massima del buffer

  15.     esito = STRCONS_Dimensiona( 3*MAX_CARATTERI );

  16.     if( esito == STRCONSErr_no_err ) richiesta_input();

  17.  

  18.     // riduce di un terzo la capacita' massima del buffer

  19.     esito = STRCONS_Dimensiona( 2*MAX_CARATTERI );

  20.     if( esito == STRCONSErr_no_err ) richiesta_input();

  21.  

  22.     printf( "Premi \"invio\" per lasciare il programma...\n\n" );

  23.     getchar();

  24.  

  25.     STRCONS_Dismetti(); // libera il buffer e azzera le variabili statiche

  26.     return 0;

  27. }

  28.  

  29. void richiesta_input( void ) {

  30.     int esito;

  31.  

  32.     printf( "Il buffer ha una capacita' massima di %d caratteri.\n\n",

  33.             STRCONS_Capacita() );

  34.  

  35.     printf( "Immetti un breve testo: " );

  36.  

  37.     esito = STRCONS_Chiedi();

  38.  

  39.     if( esito <= 0 )

  40.         printf( "\nHo letto \"%s\" (%d caratteri)\n\n",

  41.                 STRCONS_PStr(), STRCONS_Lunghezza() );

  42.     printf( "Esito: %s.\n\n\n\n", STRCONSErr_Descrizione(esito) );

  43. }




Categoria: Moduli e librerie / C
Piattaforma:

Downloads: 595
Rating: (0 voti)
Data: 13/11/2016
Download

A proposito dell'autore

Amatore, autodidatta dai tardi anni '90. Prime esperienze in HyperTalk. Successivamente, C con qualche infarinatura di C++.

Aggiungi un commento

Inserisci il tuo commento qui
Esegui il login oppure registrati per inviare commenti