/// === CLASSE ALTERNATIVA =====================================================
/// Versione 1.1 - giugno 2014/ottobre 2016
/// ============================================================================
#include <stdio.h>
#include "alternativa.h"
namespace ALTERNATIVA_NS {
static const char kOpzione1Dflt = 's'; // sta per "si'"
static const char kOpzione2Dflt = 'n'; // sta per "no"
static const short kUltimaSceltaNulla = 0;
static const char *kStrRitentaDflt = "Scelta non valida. Riprova: ";
};
using namespace ALTERNATIVA_NS;
ALTERNATIVA::ALTERNATIVA() {
opzioni( kOpzione1Dflt, kOpzione2Dflt );
stringa_riprova( kStrRitentaDflt );
us = kUltimaSceltaNulla;
}
ALTERNATIVA::ALTERNATIVA( char opz1, char opz2, const char *strRiprova ) {
opzioni( opz1, opz2 );
stringa_riprova( strRiprova );
us = kUltimaSceltaNulla;
}
ALTERNATIVA::~ALTERNATIVA() {
//dtor
}
void ALTERNATIVA::opzione_1( char opz1 ) {
o1 = opz1;
}
void ALTERNATIVA::opzione_2( char opz2 ) {
o2 = opz2;
}
void ALTERNATIVA::opzioni( char opz1, char opz2 ) {
o1 = opz1;
o2 = opz2;
}
void ALTERNATIVA::stringa_riprova( const char *strRiprova ) {
if( strRiprova == NULL )
sr = kStrRitentaDflt;
else if( *strRiprova == '\0' )
sr = kStrRitentaDflt;
else sr = strRiprova;
}
int ALTERNATIVA::scelta( void ) {
return scelta( o1, o2, sr );
}
int ALTERNATIVA::scelta( char opz1, char opz2, const char *strRiprova ) {
int r;
printf( "(%c/%c) ", opz1, opz2 );
do {
if( (r=getchar()) != '\n' )
while( getchar() != '\n' );
if( r != opz1 && r != opz2 ) {
if( strRiprova == NULL )
printf( sr );
else if( *strRiprova == '\0' )
printf( sr );
else printf( strRiprova );
}
} while( r != opz1 && r != opz2 );
us = (r == opz2) + 1;
return us;
}