Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    101

    [C]Switch...ovviare l'errore di input e miglioramenti

    Stavo provando e salvando l'istruzione switch per un eventuale uso futuro....la variabile dalla quale dipende lo switch è "scelta" dichiarata int.
    In caso di inserimento di un altro numero oltre quelli che comportano i vari casi dello switch il ciclo while viene ripetuto ma nel caso di inserimento un carattere il programma va in loop...come potrei ovviare il tutto?
    Inoltre avete consigli in generale?



    codice:
    #include<stdio.h>
    main()
    {
    int scelta;
    //il ciclo è sempre vero infatti si basa sulla condizione del while(1)che è sempre vera
    //mentre solo nel caso 0 lo switch ritorna 0 alla do while
    do{
    
    printf("digita 1 se vuoi visualizzare la scritta 'prova del primo caso'\n");   
    printf("digita 2 se vuoi visualizzare la scritta 'prova del secondo caso'\n");   
    printf("digita 3 se vuoi visualizzare la scritta 'prova del terzo caso'\n");   
    printf("digita 0 se vuoi uscire\n");   
    //variabile sulla quale si basa lo switch se era un carattere nei vari casi bisogna
    //mettere le virgolette ad esempio case"s"
    scanf("%d",&scelta);
    
    switch(scelta){
                     case 1:
                          {
                          printf("hai scelto il PRIMO caso\n");
                          }
                          break;
    //l'istruzione break serve per concludere un caso 
                     case 2:
                          {
                                printf("hai scelto il SECONDO caso\n");
                          }
                          break;
                     case 3: 
                          {
                                printf("hai scelto il TERZO caso\n");
                          }
                     case 0:
                            {
                            return 0;
                            }
                            break;
                     default:
                     {
                             printf("errore di inserimento\n\n");
                     }
                     break;
                }
    }
    while(1);
    
    system("pause");
    }

  2. #2
    scanf restituisce il numero dei campi correttamente letti e convertiti, per cui se viene inserito un carattere invece di un numero restituirà zero nel tuo caso, e in base a questo fatto si può individuare e rimediare alla condizione di errore. Il loop avviene perché scanf non riuscendo a convertire il carattere in un intero lo lascia nel buffer, e poiché questo non viene mai svuotato, il ciclo viene ripetuto all'infinito. Si rimedia facilmente:
    codice:
    if(scanf("%d",&scelta)!=1)
    {
        /* Svuota il buffer dai caratteri non validi leggendo finché non trova il ritorno a capo */
        while(getchar()!='\n')
            ;
        /* Imposta scelta a un valore "impossibile", così che nello switch venga stampato "errore di inserimento"
        nota che se non venisse impostato a qualcosa resterebbe impostato sull'ultimo valore inserito,
        per cui potrebbe essere eseguita un'azione dello switch indesiderata */
        scelta=-1;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    101
    Grazie

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.