Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Classe ALTERNATIVA - alternativa.cpp

alternativa.cpp

Caricato da: AldoBaldo
Scarica il programma completo

  1. /// === CLASSE ALTERNATIVA =====================================================
  2. /// Versione 1.1 - giugno 2014/ottobre 2016
  3. /// ============================================================================
  4.  
  5.  
  6. #include <stdio.h>
  7.  
  8. #include "alternativa.h"
  9.  
  10.  
  11. namespace ALTERNATIVA_NS {
  12.     static const char kOpzione1Dflt = 's'; // sta per "si'"
  13.     static const char kOpzione2Dflt = 'n'; // sta per "no"
  14.     static const short kUltimaSceltaNulla = 0;
  15.     static const char *kStrRitentaDflt = "Scelta non valida. Riprova: ";
  16. };
  17.  
  18. using namespace ALTERNATIVA_NS;
  19.  
  20.  
  21. ALTERNATIVA::ALTERNATIVA() {
  22.     opzioni( kOpzione1Dflt, kOpzione2Dflt );
  23.     stringa_riprova( kStrRitentaDflt );
  24.     us = kUltimaSceltaNulla;
  25. }
  26.  
  27.  
  28. ALTERNATIVA::ALTERNATIVA( char opz1, char opz2, const char *strRiprova ) {
  29.     opzioni( opz1, opz2 );
  30.     stringa_riprova( strRiprova );
  31.     us = kUltimaSceltaNulla;
  32. }
  33.  
  34.  
  35. ALTERNATIVA::~ALTERNATIVA() {
  36.     //dtor
  37. }
  38.  
  39.  
  40. void ALTERNATIVA::opzione_1( char opz1 ) {
  41.     o1 = opz1;
  42. }
  43.  
  44.  
  45. void ALTERNATIVA::opzione_2( char opz2 ) {
  46.     o2 = opz2;
  47. }
  48.  
  49.  
  50. void ALTERNATIVA::opzioni( char opz1, char opz2 ) {
  51.     o1 = opz1;
  52.     o2 = opz2;
  53. }
  54.  
  55.  
  56. void ALTERNATIVA::stringa_riprova( const char *strRiprova ) {
  57.     if( strRiprova == NULL )
  58.         sr = kStrRitentaDflt;
  59.     else if( *strRiprova == '\0' )
  60.         sr = kStrRitentaDflt;
  61.     else sr = strRiprova;
  62. }
  63.  
  64.  
  65. int ALTERNATIVA::scelta( void ) {
  66.     return scelta( o1, o2, sr );
  67. }
  68.  
  69.  
  70. int ALTERNATIVA::scelta( char opz1, char opz2, const char *strRiprova ) {
  71.     int r;
  72.  
  73.     printf( "(%c/%c) ", opz1, opz2 );
  74.  
  75.     do {
  76.         if( (r=getchar()) != '\n' )
  77.             while( getchar() != '\n' );
  78.  
  79.         if( r != opz1 && r != opz2 ) {
  80.             if( strRiprova == NULL )
  81.                 printf( sr );
  82.             else if( *strRiprova == '\0' )
  83.                 printf( sr );
  84.             else printf( strRiprova );
  85.         }
  86.     } while( r != opz1 && r != opz2 );
  87.  
  88.     us = (r == opz2) + 1;
  89.  
  90.     return us;
  91. }