/* Analizza pi1000.txt, creato con echo "scale=1000; 4*a(1)" | BC_LINE_LENGTH=0 bc -l > pi1000.txt 1. uso di fscanf() */ #include #include #include int main() { FILE *fp; char pi[1010]; /* solita 'sicurezza' => wc -c pi1000.txt -> 1003 caratteri (incluso \n) => servono 1004 caratteri (incluso lo zero finale) */ int i, nc, dec; fp = fopen("pi1000.txt", "r"); fscanf(fp, "%[^a]", pi); printf("%s", pi); // notare l'assenza di \n, ma va ugualmente a capo printf("ho letto %lu caratteri\n", strlen(pi)); // alternativa fscanf(fp, "%[^\n]", pi); // legge fino al primo accapo, incluso printf("%s", pi); printf("ho letto %lu caratteri\n", strlen(pi)); // il file va chiuso quando non serve piĆ¹ e non semplicemente alla fine fclose(fp); // stampiamo i primi 10 caratteri dopo la 'virgola' (il PUNTO!) printf("Primi 10 caratteri dopo il punto decimale: "); i = nc = dec = 0; while (nc<10 && i < 20) { // printf("i=%d, nc=%d, pi[i] = %c \n", i, nc, pi[i]); if(dec) { // siamo dopo la virgola nc++; printf("%c", pi[i]); } if(pi[i] == '.') { dec=1; } i++; } printf("\n"); return 0; }