/* svuosi.cpp */ /* Ohjelmalla lasketaan henkil”n ik„. vl/92 */ #include #include #include const int NYKYVUOSI=2000; void ohjeet(void) { cout << "Kerron sinulle paljonko t„yt„t t„n„ vuonna!" << endl; } const int kysyOletus = 20000; void kysy(int *luku, const char *kysymys, int oletus=kysyOletus, int ala=-kysyOletus,int yla=kysyOletus) // Aliohjelmalla kysyt„„n kokonaisluku. Luvun on // oltava v„lill„ [ala,yla]. (V„li muutetaan aina oikeinp„in) // Jos oletusparametri annetaan, niin pelkk„ [ret] palauttaa // oletusarvon. N„ytt””n tulostetaan kysymys ja mahdollinen // oletusarvo. // Esim: kysy(&ika,"Anna ik„si") // tulostaa: Anna ik„si > // ja sy”t”ksi kelpaa mik„ tahans luku v„lilt„ [-20000,20000] // Esim: kysy(&vuosi,"Anna vuosi",2000,0,2020) // tulostaa: Anna vuosi (2000) > // ja sy”t”ksi kelpaa mik„ tahansa luku v„lilt„ [0,2020] // pelk„n ret-painaminen palauttaa luvun 2000 { int a; string s; if ( ala > yla ) { int t = ala; ala = yla ; yla = t; } while ( 1 ) { a = oletus; cout << kysymys; if ( oletus != kysyOletus ) cout << " (" << oletus << ")"; cout << " >"; getline(cin,s); // Luetaan sy”tt” merkkijonoon! if ( ( oletus != kysyOletus ) && ( s == "" ) ) break; int lkm = sscanf(s.c_str(),"%d",&a); // onnistuneesti "parsittujen" % lkm if ( lkm < 1 ) { cout << "Sy”t„pp„ numeroita, kiitos!\n"; continue; } if ( ala <= a && a <= yla ) break; // Hyvin meni cout << "Luvun pit„isi olla v„lill„ [" << ala << "," << yla << "]!\n"; } *luku = a; } int main(void) { int svuosi,ika; ohjeet(); kysy(&svuosi,"Anna syntym„vuotesi",1977,1850,NYKYVUOSI); // kysy(&svuosi,"Anna syntym„vuotesi"); // voisi kutsua n„inkin ika = NYKYVUOSI - svuosi; cout << "T„yt„t t„n„ vuonna " << ika << " vuotta." << endl; return 0; }