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
────══════♦☆♦══════────
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
Sito: 7ecnologie
Sezione: 08. C language
Capitolo: 05. Esercizi svolti
Paragrafo: 14. File
Indice dei capitoli: 00. Risorse - 01 Ambiente di sviluppo - 02. Introduzione al C - 03. Le librerie - 04. Tutorial - 05. Esercizi svolti - 98. Esercizi
Indice dei paragrafi: 01. printf e scanf - 02. Swap di variabili - 03. if - 04. Numeri pari - 05. if/else - 06. while - 07. Controllo dell'input - 08. for - 09. Operatore % - 10. Funzioni - 11. Tipo float - 12. Tipo char - 13. Stringhe - 14. File