Ciao a tutti è da giorni che sto cercando di capire come risolvere questo esercizio:
Si definisca una variabile di ambiente MY_FILE che abbia valore uguale al nome di un file presente nella directory corrente. Si scriva un programma che conti il numero di occorrenze di ogni carattere all’interno del file il cui nome è nella variabile di ambiente MY_FILE. Per ogni carattere presente nel file, viene stampato il codice ASCII in esadecimale e il numero di occorrenze.
Quello che non capisco è come creare e utilizzare la variabile d'ambiente MY_FILE. Il resto sono riuscito a farlo così:
Si definisca una variabile di ambiente MY_FILE che abbia valore uguale al nome di un file presente nella directory corrente. Si scriva un programma che conti il numero di occorrenze di ogni carattere all’interno del file il cui nome è nella variabile di ambiente MY_FILE. Per ogni carattere presente nel file, viene stampato il codice ASCII in esadecimale e il numero di occorrenze.
Quello che non capisco è come creare e utilizzare la variabile d'ambiente MY_FILE. Il resto sono riuscito a farlo così:
C:
#include <stdlib.h>
#include <stdio.h>
#define LENGTH 89
void esadecimale(int cast);
char percorso[LENGTH] = "/home/lorenzo/Scrivania/SO/Esercizi/Es. T2/ciao.txt";
int main(){
char s[LENGTH], t;
int a, i, j, cont, resto;
FILE *pf ;
pf = fopen (percorso, "r") ;
if (pf){
while (!feof (pf))
fgets(s, sizeof(s), pf);
}else
printf ("errore durante l’ apertura del file.");
for(t = '!'; t < 'z'; t++){
cont = 0;
for(i = 0; i < sizeof(s) && s[I] != '\0'; i++){
if(s[I] == t)
cont++;
}
if(cont != 0){
printf("%d, %c", cont, t);
printf(" [");
resto = 1;
int cast = (int) t;
esadecimale(cast);
printf("]\n");
}
}
}
void esadecimale(int cast){
if(cast % 16 != 0){
if(cast % 16 == 10){
esadecimale(cast/16);
printf("A");
}else if(cast % 16 == 11){
esadecimale(cast/16);
printf("B");
}else if(cast % 16 == 12){
esadecimale(cast/16);
printf("C");
}else if(cast % 16 == 13){
esadecimale(cast/16);
printf("D");
}else if(cast % 16 == 14){
esadecimale(cast/16);
printf("E");
}else if(cast % 16 == 15){
esadecimale(cast/16);
printf("F");
}else{
esadecimale(cast/16);
printf("%d", cast%16);
}
}
}