3° Anno TEORIA 9.1 EXTRA: ARRAY DI CHAR (STRINGHE) | Page 5

8-1 : EXTRA : Array di caratteri ( stringhe ) Vers . 4.3 – Febbraio 2022
Esempio 2 ) lettura e scrittura di un array monodimensionale di caratteri – LINGUAGGIO C ( ALTERNATIVO SPECIALE )
AVVISO IMPORTANTE La funzione scanf applicata alle stringhe ( quindi con formato "% s ") non è in
# include < stdio . h > grado di acquisire correttamente una stringa contenente gli spazi .
# include < stdlib . h > In caso di stringa in input con uno o più spazi , detta funzione , contrariamente
# include < string . h > alla gets che non da alcun problema , si limiterebbe a restituire tutti i caratteri
# define MAXDIM 50 letti fino al primo spazio ( blank ) incontrato . int main ( int argc , char * argv [ ]) ( esempio : " La rosa dei venti " letta con scanf restituitrebbe solamente " La ")
{ char str [ MAXDIM + 1 ]; // Devo tenere conto del carattere di terminazione della stringa '/ 0 ' int i , n ;
/* carico la stringa TUTTA IN UNA VOLTA rispettando il vincolo imposto da MAXDIM */
do { printf (" Inserisci la stringa : "); fflush ( stdin ); scanf ("% s ", str ); // alternativa gets ( str ); n = strlen ( str ); oppure
} while (( n = = 0 ) || ( n > MAXDIM )); do { printf (" Inserisci la stringa : "); fflush ( stdin ); gets ( str ); // N . B . con scanf ( ) non funziona n = strlen ( str ); cfr = strcmp ( str , ""); } while (( cfr = = 0 ) || ( n > MAXDIM ));
/* visualizzo la stringa TUTTA IN UNA VOLTA */ printf (" La stringa immessa e ': "); printf ("% s ", str ); // alternativa puts ( str );
system (" PAUSE "); return 0 ; }
N . B . Traducendo fedelmente il nostro pseudocodice avremmo dovuto scrivere while (( n < 1 ) || ( n > MAXDIM )); ma poiché non esistono stringhe a lunghezza negativa e la lunghezza della stringa vuota "" è uguale a 0 , possiamo scrivere anche così !
/* Si ripetano tutte le istruzioni sopra illustrate , comprese le dichiarazioni delle variabili */ /* leggo la stringa rispettando il vincolo imposto da MAXDIM */
do
{ printf (" Inserisci la stringa : "); fflush ( stdin ); oppure scanf ("% s ", str ); // alternativa gets ( str );
} while (( strlen ( str ) = = 0 ) || ( strlen ( str ) > MAXDIM ));
/* visualizzo la stringa */ printf (" La stringa immessa e ': "); printf ("% s ", str ); // alternativa puts ( str );
system (" PAUSE "); return 0 ; } do { printf (" Inserisci la stringa : "); fflush ( stdin ); gets ( str ); // N . B . con scanf ( ) non funziona } while (( strcmp ( str , "") = = 0 ) || ( strlen ( str ) > MAXDIM ));
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it ) Pag . 5