Dati in input caratteeri,contare le vocali inserite

di il
4 risposte

Dati in input caratteeri,contare le vocali inserite

Ciao,il programma è scritto bene ma e non da errori nella compilazioni ma poi quando lo mando in esecuzione ,la frase ("inserisci il carattere") si ripete a blocchi di due quando invece dovrebbe uscirne una per volta
sapete il perchè??
ecco il codice:

#include <stdio.h>
#include <stdlib.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);
int i;
for(i=0;i<num;i++){
printf("inserisci il carattere");
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("sono stati inseriti %d caratteri, tra questi sono stati inseriti %d vocali minuscole, %d vocali maiuscole e gli altri caratteri inseriti sono %d",num,vocmin,vocmaiusc,altro);
system("pause");
}

4 Risposte

  • Re: Dati in input caratteeri,contare le vocali inserite

    Aggiungi uno spazio subito dopo le virgolette così

    scanf(" %c",&c);
  • Re: Dati in input caratteeri,contare le vocali inserite

    Grazie mille ora funziona, come mai bisogna inserire questo spazio?
  • Re: Dati in input caratteeri,contare le vocali inserite

    Per 'consumare' il newline che resta nel buffer
  • Re: Dati in input caratteeri,contare le vocali inserite

    @ 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à...
Devi accedere o registrarti per scrivere nel forum
4 risposte