Salve a tutti (mi sono appena registrato
)
Sono alle prime armi con il C, e sto leggendo il K&R che immagino la maggior parte di voi conosca.
Sto provando a svolgere gli esercizi proposti dal testo pero', dal momento che non vi sono le soluzioni, non ho modo di verificare se quanto scrivo sia una buona soluzione.
Vorrei quindi chiedervi, se possibile, se potete dare uno sguardo al codice che segue (esercizio 1.13 del testo); il programma funziona, vi chiedo di darmi consigli/correzioni/giudizi, se potevo trovare soluzioni piu' sintetiche, se vi sono errori di concetto, se il codice e' troppo ermetico o troppo prolisso e, in generale, tutto quello che notate.
Grazie
codice:
/* Si scriva un programma che visualizzi un istogramma
della lunghezza delle parole contenute nel testo in
ingresso. E' facile disegnare un istogramma che si
sviluppa in orizzontale, mentre richiede maggior
abilita' tracciarlo in verticale */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 10
int main()
{
int i, k;
int contatore[MAX_LENGTH];
char *buffer = (char *)malloc(MAX_LENGTH*sizeof(char));;
char c;
for (i=0; i < MAX_LENGTH; i++) {
contatore[i] = 0;
}
printf("\nInserire del testo con parole di lunghezza massima 10.\n");
printf("Per terminare l'inserimento scrivere fine.\n\n");
i=0;
while (strcmp(buffer, "fine")) {
c = getchar();
if (c != ' ' && c != '\t' && c != '\n') {
buffer[i] = c;
i++;
} else {
buffer[i] = '\0';
if (strcmp(buffer, "fine")) {
contatore[strlen(buffer)-1]++;
}
i=0;
}
}
free(buffer);
printf("\nIstogramma orizzontale della lunghezza delle parole inserite:\n\n");
for (i=0; i < MAX_LENGTH; i++) {
printf("Parole di lunghezza %d:\t", i+1);
if (contatore[i]) {
for (k=0; k < contatore[i]; k++) {
printf("*");
}
}
printf("\n");
}
return 0;
}