Problemi costruzione codice con lo switch

di Anonimizzato25010 il
11 risposte
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

  • 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
  • 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à.
  • No devi capire da solo. Cosa controlleresti con la if per controllare la vocale?
  • 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.
  • Ti ho già detto tante volte ...

    Quale variabile controlli con la if?
    Quale variabile controlli 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.
  • 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
  • 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
  • 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?
  • 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
  • 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