Ciao Oregon e grazie ancora per la risposta. Il codice presenta delle incongruenze "assurde" perchè avevo effettuato delle modifiche al codice "nativo" che avevo scritto per fare delle prove e per modificarlo prima di mandarlo non l'ho reso come in origine. Difatti, il codice che avrei dovuto proporre è questo:
#include "stdio.h"
#include "stdlib.h"
int main(){
char *stringa;
int dim, i, maiuscole=0, minuscole=0, spazi=0;
printf("Inserire dimensione stringa: ");
scanf("%d",&dim);
stringa=(char*)malloc(sizeof(char)*dim);
while('\n'!=getchar());
fgets(stringa,dim,stdin);
for(i=0;i<dim;i++){
if(stringa[i]>64 && stringa[i]<91){
maiuscole++;
}
if(stringa[i]>96 && stringa[i]<123){
minuscole++;
}
if(stringa[i]==32){
spazi++;
}
}
printf("\nMaiuscole=%d\nMinuscole=%d\nSpazi=%d\n",maiuscole,minuscole,spazi);
for(i=0;i<dim;i++)
printf("%c",stringa[i]);
}
In ogni caso, avevo pensato che il problema potesse essere scaturito dal carattere di newline, ma non avevo tenuto conto del carattere terminatore della stringa. Ho seguito comunque il tuo consiglio e dunque modificato il codice in questo modo:
#include "stdio.h"
#include "stdlib.h"
int main(){
char *stringa;
int dim, i, maiuscole=0, minuscole=0, spazi=0;
printf("Inserire dimensione stringa: ");
scanf("%d",&dim);
stringa=(char*)malloc(sizeof(char)*dim);
while('\n'!=getchar());
fgets(stringa,dim,stdin);
dim++;
for(i=0;i<dim;i++){
if(stringa[i]>64 && stringa[i]<91){
maiuscole++;
}
if(stringa[i]>96 && stringa[i]<123){
minuscole++;
}
if(stringa[i]==32){
spazi++;
}
}
printf("\nMaiuscole=%d\nMinuscole=%d\nSpazi=%d\n",maiuscole,minuscole,spazi);
for(i=0;i<dim;i++)
printf("%c",stringa[i]);
}
ma continua a mangiare l'ultima parola, di qualsiasi "natura" essa sia.