@ FILMAN
Sto studiando anche io il C, e il buffer è una delle cose che deve essere capita "bene"
La ottima soluzione di oregon, non ti mette al riparo da un input multiplo, prova ad inserire: abcd, invece di una lettera sola e vedrai che il problema si ripresenta, perché lo spazio aggiuntivo di oregon "mangia" solo un carattere.
In un'applicazione come la tua va più che bene, ma sapere come pulire il buffer indipendentemente da quanti caratteri ci sono dentro, fa comodo
la riga: if (c!=10) while(getchar() != '\n'); pulisce il buffer.
Nel buffer ci deve essere 10, codice ASCII di Linefeed = '\n'
se non c'è 10 significa che ci sono anche altri caratteri, while getchar(), li "mangia" finché non trova 10 ('\n')
#include <stdio.h>
#include <math.h>
int main(){
int num,vocmin,vocmaiusc,altro;
vocmin=0;
vocmaiusc=0;
altro=0;
char c;
printf("Quanti caratteri vuoi inserire? ");
scanf("%d",&num);
printf("\n");
int i;
for(i=0;i<num;i++){
printf("inserisci il carattere %2d: ", i+1);
if (c!=10) while(getchar() != '\n'); // pulisce il buffer, se occorre
scanf("%c",&c);
if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u'){
vocmin++;
}
else if(c=='A' || c=='E' || c=='I' || c=='O' || c=='U' ){
vocmaiusc++;
}
else altro++;
}
printf("\nn.%3d caratteri totali\nn.%3d vocali minuscole\nn.%3d vocali maiuscole\nn.%3d altri caratteri\n\n",num,vocmin,vocmaiusc,altro);
system("pause");
}
Ho dato una sistematina anche all'output, ma è solo per migliorare l'estetica (soggettiva) e la leggibilità...