Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] ripetizione di un intero programma usando char

    Ciao ragazzi, Vi dico subito che non sono molto esperto con il C o il C++ , diciamo che sono quasi alle prime armi.
    Ho scritto un programma che tramite una funzione menù consente di scegliere fra 6 opzioni e per ogni opzione ho scritto una funzione con uno switch(scelta).
    Il programma funziona correttamente e avevo previsto un do-while per ripetere il programma da capo nel caso sia necessario . La condizione del do-while la inserivo sempre come int cioè facevo una scanf che permetteva di inserire i valori 0 o 1 rispettivamente per terminare il programma o ripartire da capo. In questo modo funziona ma se voglio sostituire la i valori 0 o 1 con 'S' o 'N' (char) il programma mi ripete sempre "reinserisci la scelta" (indifferentemente dal valore che immetto) . Come posso fare per far si che funzioni con S o N ?
    Siccome non credo di essermi spiegato molto bene , vi incollo di seguito il programma principale che contiene (nelle ultime righe) la condizione del do-while .

    codice:
    main(){ int scelta,scelta2=0,scelta3=0;
            char flag; 
            do{ 
            system("cls");
            scelta=menu();
            switch(scelta){ 
                            case(1):  
                                     numeri_primi();
                                     break;
                            case(2): 
                                     numeri_perfetti();
                                     break;
                            case(3): 
                                     numeri_abbondanti();
                                     break;
                            case(4): 
                                     numeri_amici();
                                     break;
                            case(5): 
                                     do{ numeri_coprimi();
                                         do{
                                             printf("Ricominciare ? [1=Si][0=No]: ");
                                             scanf("%d",&scelta2);}
                                         while((scelta2<0)||(scelta2>1));}
                                     while(scelta2==1);
                                     break;
                            case(6): 
                                     do{ numeri_felici();
                                         do{
                                             printf("ricominciare ? [S/N]: ");
                                             scanf("%d",&scelta3);}
                                         while((scelta3<0)||(scelta3>1));}
                                     while(scelta3==1);
                                     break;}
                                     
             do{ printf("vuoi tornare al menu ? S/N: ");
                 getchar();
                 scanf("%c",&flag);             
                 }while((flag!='S')||(flag!='N'));
            }while(flag=='S');
            }

  2. #2
    hai provato mettendo una getchar() dopo la scanf%c per eliminare il \n dal buffer input?

  3. #3
    Originariamente inviato da Celebron
    hai provato mettendo una getchar() dopo la scanf%c per eliminare il \n dal buffer input?
    Ci ho provato ora, il risultato è solo che ogni 2 printf("....") mi "assorbe" un carattere (N o S o quel che sia ) e quindi mi esce per esempio:

    vuoi tornare al menu ? S/N: Y

    e il cursore sotto , in attesa che reinserisca un'altra volta :/

  4. #4
    potresti specificare meglio dove hai questo problema, che come lo hai spiegato prima non ho compreso molto bene

    in più posta anche la funzione menu()

  5. #5
    Originariamente inviato da Celebron
    potresti specificare meglio dove hai questo problema, che come lo hai spiegato prima non ho compreso molto bene

    in più posta anche la funzione menu()
    Ho risolto il problema , in pratica quando facevo il controllo dell'input con il do-while mettevo nella condizione il connettore or invece dovevo mettere l' and

    codice sbagliato :

    codice:
             do{ printf("vuoi tornare al menu ? S/N: ");
                 getchar();
                 scanf("%c",&flag);             
                 }while((flag!='S')||(flag!='N'));
    codice corretto :

    codice:
             do{ printf("vuoi tornare al menu ? S/N: ");
                 getchar();
                 scanf("%c",&flag);             
                 }while((flag!='S')&&(flag!='N'));
    notare l'and al posto dell'or .
    Grazie comunque per le risposte ... se avete qualche suggerimento per migliorare il programma principale scriveteli pure

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da Flamingo Drive
    ... se avete qualche suggerimento per migliorare il programma principale scriveteli pure
    giusto se vuoi divertirti dichiara un vettore di puntatori a funzione, e invece di un "case" metti direttamente la chiamata alla funzione dell'indice scelt-esimo

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 © 2024 vBulletin Solutions, Inc. All rights reserved.