Mutta entäpä jos tiettyjä tarkistuksia haluttaisiin kuitenkin tehdä. Pitääkö koko ohjelma kirjoittaa uusiksi?
Ei! Kriittinen on tietenkin vain kysy_tiedot. Mikäli aliohjelma on toteutettu ilman silmukkaa, kysymällä kukin tieto omalla lauseellaan, niin siitä sitten vaan lisäämään tarkistus kunkin lukemisen ympärille. Tämä on aivan hyvä ratkaisu, mikäli kenttiä on vähän tai kentät ovat eri tietotyyppiä.
int cNaytto::kysy_tiedot(cJasen &jasen)
{
. . .
do {
cout << "Hetu >"; getline(cin,apujasen.hetu,'\n');
poista_tyhjat(apujasen.hetu);
if ( apujasen.hetu == "q" ) return 1;
} while ( tarkista_hetu(apujasen.hetu) );
. . .
do {
cout << "Jäsenmaksu mk >"; cin.getline(N_S(jono),'\n');
if ( strcmp(jono,"q") == 0 ) return 1;
apujasen.jmaksu = jono_doubleksi(jono,"%lf");
} while ( (apujasen.jmaksu < 0) || ( 500 < apujasen.jmaksu ) );
Voiko tarkista_hetu edes selvitä tarkistuksista? Osasta voi,
mutta entäpä jos esimerkiksi hetu pitää olla
erisuuri kullekin jäsenelle. Aliohjelma ei tiedä mihin hetuja
verrattaisiin! Siis aliohjelmalle pitäisi parametrina viedä tietysti
myös käsiteltävä kerho tai ainakin jäsenistö.