14. File

Esercizio

Acquisire un indirizzo di posta elettronica da tastiera.

Aprire in lettura il file email.txt, contenente un elenco di indirizzi di posta elettronica e verificare se l'indirizzo di posta è presente nel file.

Nota:

Si assuma che un indirizzo di posta non possa essere più lungo di 64 caratteri.

Esempio di esecuzione n. 1:


Inserire un indirizzo di posta elettronica:

mario.rossi@dominio.com

L'indirizzo non e' presente nel file email.txt


Svolgimento


#include <stdio.h>

#include <string.h>

int main()

{

char email[65], record[65];

int trovato=0, ret;

FILE *fd;


printf("Inserire un indirizzo di posta elettronica:\n");

scanf("%64s", email);


fd=fopen("email.txt", "r");

if (fd==NULL){

printf("Errore nell'apertura del file\n");

return 1;

}

do{

ret = fscanf(fd, "%64s", record);

if (strcmp(email, record)==0){

trovato=1;

break;

}

}while (ret!= EOF);

fclose(fd);


if (trovato)

printf("\nL'indirizzo e' presente nel file email.txt\n");

else

printf("\nL'indirizzo non e' presente nel file email.txt\n");

return 0;

}


Commento

Prima dell'esecuzione del file è necessario creare il file "email.txt" nella cartella corrente del programma, contenente i valori indicati in calce.

Gli array di caratteri email[] e record[] sono stati dimensionati a 65 perché il testo precisa che l'indirizzo più lungo possibile è di 64 caratteri. E' riservato un carattere per il "tappo" ('\0').

Le funzioni scanf("%64s", email) e fscanf(fd, "%64s", record), prudenzialmente limitano il numero di caratteri da acquisire a 64 (cui va aggiunto il "tappo").

La funzione strcmp() confronta due stringhe e restituisce 0 se le stringhe sono uguali.


File email.txt


luca.montezemolo@dominio.com

maria.bianchi@dominio.com

mario.rossi@dominio.com

antonella.rossi@dominio.com


────══════♦☆♦══════────

Esercizio


Aprire in lettura il file prosa.txt, contenente un generico brano.

Effettuare il conteggio dei caratteri, delle vocali e delle consonanti e stampare il report a video.

Non considerare nel conteggio delle vocali né delle consonanti le lettere accentate.

Esempio di esecuzione:


Numero di caratteri: 338

Numero di vocali: 116

Numero di consonanti: 144


Svolgimento

#include <stdio.h>

char lowercase(char c){

if (!(('a'<=c && c<='z') || ('A'<=c && c<='Z')))

return 0;

else if('A'<=c && c<='Z')

c=c+32;


return c;

}



int main()

{

int cont, cont_v, cont_c, ret;

char c;

FILE *fd;


fd=fopen("prosa.txt", "r");

if (fd==NULL){

printf("Errore nell' apertura del file\n");

return 1;

}


cont=0;

cont_v=0;

cont_c=0;

do{

ret = fscanf(fd, "%c", &c);


if (ret!= EOF){

cont++;

c=lowercase(c);

if (c){

if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u')

cont_v++;

else

cont_c++;

}

}

}while (ret!= EOF);


printf("Numero di caratteri: %d\nNumero di vocali: %d\nNumero di consonanti: %d\n",

cont, cont_v, cont_c);


fclose(fd);


return 0;

}


Commento

Il file prosa.txt è aperto in lettura con fd=fopen("prosa.txt", "r");

Tramite la fscanf() è acquisito e controllato un carattere alla volta.

La funzione lowercase() converte i caratteri alfabetici in minuscolo per facilitare i conteggi. La funzione restituisce 0 se il carattere non è una lettera dell'alfabeto.


File prosa.txt

Gli uomini, per quanto possano volersi bene, rimangano sempre lontani; se uno soffre, il dolore è completamente suo, nessun altro può prenderne su di sé una minima parte; se uno soffre, gli altri per questo non sentono male, anche se l’amore è grande, e questo provoca la solitudine della vita.

Dino Buzzati, Il Deserto dei Tartari