Problemi costruzione codice con lo switch

di il
11 risposte

Problemi costruzione codice con lo switch

Salve a tutti ho un problema con il seguente (premetto che con l'if funziona perfettamente ma vorrei farlo con lo switch):
/* Conta quante volte compaiono le lettere in una frase*/
#include<stdio.h>
int main(void)
{
char ch;
int lunghezza=0;
int vocali=0;
printf("Inserire un messaggio: ");
ch=getchar();

while(ch!='\n'){
lunghezza++;
ch=getchar();

switch (vocali) {
case 'a': case 'A': case 'e': case 'E': case 'i': case 'I': case 'o': case 'O': case 'u': case 'U':
vocali++;
break;
default: printf("Non ci sono vocali,riprovare ancora.\n");
      }
}
printf("Il messaggio è lungo %d caratteri.\nNel messaggio sono contenute %d vocali.\n",lunghezza,vocali);
return 0;
}
Spero che voi possiate aiutarmi , motivo per cui faccio affidamento alle vostre capacità e alle vostre conoscenze. Grazie a tutti per la vostra disponibilità.

11 Risposte

  • Re: Problemi costruzione codice con lo switch

    Vocali è il contatore, nello switch va inserita la variabile che contiene la vocale ...

    Scusa, ma la if come la fai?

    P.S. Attenzione, come hai messo le getchar adesso il primo carattere non può essere controllato ... e la printf di vocale non trovata non serve
  • Re: Problemi costruzione codice con lo switch

    Ci tengo a ringraziarti per i consigli,tuttavia non riesco ancora ad usare lo switch in modo appropriato.
    /* Conta quante volte compaiono le lettere in una frase*/
    #include<stdio.h>
    int main(void)
    {
    char ch;
    int lunghezza=0;
    int vocali=0;
    printf("Inserire un messaggio: ");
    ch=getchar();
    
    while(ch!='\n'){
    ch=getchar();
    lunghezza++;
    
    switch (lunghezza) {
    case 'a': case 'A': case 'e': case 'E': case 'i': case 'I': case 'o': case 'O': case 'u': case 'U':
    vocali++; break;
          }
    
    }
    printf("Il messaggio è lungo %d caratteri.\nNel messaggio sono contenute %d vocali.\n",lunghezza,vocali);
    return 0;
    }
    Quando vado a compilare mi esce questo

    Inserire un messaggio: ciao
    Il messaggio è lungo 4 caratteri.
    Nel messaggio sono contenute 0 vocali.

    Gradirei molto se a questo punto potreste dirmi come fare dato che ho esaurito le idee ed avere un chiarimento su questo argomento mi aiuterebbe a chiarire alcune mie incertezze. Grazie per la disponibilità.
  • Re: Problemi costruzione codice con lo switch

    No devi capire da solo. Cosa controlleresti con la if per controllare la vocale?
  • Re: Problemi costruzione codice con lo switch

    Con l'if avevo impostato il codice in questo modo:
    /* Conta quante volte compaiono le lettere in una frase*/
    #include<stdio.h>
    int main(void)
    {
    char ch;
    int lunghezza=0;
    int vocali=0;
    printf("Inserire un messaggio: ");
    ch=getchar();
    
    while(ch!='\n'){
    lunghezza++;
    ch=getchar();
    if((ch=='a')||(ch=='A')||(ch=='e')||(ch=='E')||(ch=='i')||(ch=='I')||(ch=='o')||(ch=='O')||(ch=='u')||(ch=='U'))
    vocali++;
    }
    printf("Il messaggio è lungo %d caratteri.\nNel messaggio sono contenute %d vocali.\n",lunghezza,vocali);
    return 0;
    }
    Non è che vorrei la pappa pronta ma vorrei capire almeno come impostarlo con lo switch.Comunque potresti dirmi almeno se i case li ho impostati bene? Grazie ancora.
  • Re: Problemi costruzione codice con lo switch

    Ti ho già detto tante volte ...

    Quale variabile controlli con la if?
    Quale variabile controlli con lo switch?
  • Re: Problemi costruzione codice con lo switch

    Dopo i tuoi ultimi consigli sono riuscito a capire i punti in comune tra l'if e lo switch (intendo l'impostazione del codice) e ti ringrazio per questo.
    /* Conta quante volte compaiono le lettere in una frase*/
    #include<stdio.h>
    int main(void)
    {
    char ch;
    int lunghezza=0;
    int vocali=0;
    printf("Inserire un messaggio: ");
    ch=getchar();
    
    while(ch!='\n'){
    ch=getchar();
    lunghezza++;
    
    switch (ch) {
     case 'a': 
     case 'A': 
     case 'e': 
     case 'E': 
     case 'i': 
     case 'I': 
     case 'o': 
     case 'O':  
     case 'u': 
     case 'U': 
     vocali++; break;
         }
    
    }
    printf("Il messaggio è lungo %d caratteri.\nNel messaggio sono contenute %d vocali.\n",lunghezza,vocali);
    return 0;
    }
    Vorrei sapere se avrei potuto fare meglio oppure va bene anche così.
    Ti ringrazio ancora per l'aiuto e vorrei imparare di più. Mi farò risentire a breve.
  • Re: Problemi costruzione codice con lo switch

    Sei sulla strada ma, come ti ho detto prima, il primo carattere non viene controllato.

    Devi spostare la seconda getchar alla fine del ciclo, prima della parentesi di chiusura del ciclo stesso
  • Re: Problemi costruzione codice con lo switch

    Sono sicuro che hai ragione ma il programma funziona correttamente anche prima del tuo suggerimento, dopo aver fatto come mi hai detto tu non è cambiato niente e il programma funziona lo stesso correttamente.Sarebbe una buona idea se per il primo getchar mettessi un if di controllo per vedere se è uguale ad invio (intendo '\n'). Grazie
  • Re: Problemi costruzione codice con lo switch

    No che non funziona lo stesso altrimenti non avrei perso tempo a scriverti, non credi?

    Se scrivi la parola

    abc

    quante vocali ti dà il primo e il secondo codice?
  • Re: Problemi costruzione codice con lo switch

    Ho modificato in parte il codice e ho scritto abc per fare la prova.
    /* Conta quante volte compaiono le lettere in una frase*/
    #include<stdio.h>
    int main(void)
    {
    char ch;
    int lunghezza=0;
    int vocali=0;
    
    repeat:
    printf("Inserire un messaggio: ");
    ch=getchar();
    if(ch!='\n') goto ciclo;
    else goto repeat;
    
    ciclo:
    while(ch!='\n'){
    lunghezza++;
    
    switch (ch) {
     case 'a': 
     case 'A': 
     case 'e': 
     case 'E': 
     case 'i': 
     case 'I': 
     case 'o': 
     case 'O':  
     case 'u': 
     case 'U': 
     vocali++; break;
         }
    ch=getchar();
    
    }
    printf("Il messaggio è lungo %d caratteri.\nNel messaggio sono contenute %d vocali.\n",lunghezza,vocali);
    return 0;
    }
    Ho inserito dei goto per renderlo più efficiente, infatti se il primo carattere che inserisco è il tasto invio mi ripete ciò che sta scritto nella printf
    PRIMO ESEMPIO:
    Inserire un messaggio: ciao
    Il messaggio è lungo 4 caratteri.
    Nel messaggio sono contenute 3 vocali.

    SECONDO ESEMPIO:
    Inserire un messaggio:
    Inserire un messaggio:
    Inserire un messaggio:
    Inserire un messaggio: abc
    Il messaggio è lungo 3 caratteri.
    Nel messaggio sono contenute 1 vocali.

    Spero che almeno adesso posso andare bene così. Grazie
  • Re: Problemi costruzione codice con lo switch

    Non ho capito perché di quei goto. Se non inserisci la parola, elimina i goto e stampa che è lunga 0.

    Se vuoi controllare l'inserimento allora usa un ciclo e non i goto.
Devi accedere o registrarti per scrivere nel forum
11 risposte