/* nayttote.cpp */ /* Kerho-ohjelman menut ja toimintojen rungot. ** Tekijät: Vesa Lappalainen ** Ohjelmointikurssi 1996 ** Tehty: 6.12.1995 ** Muutettu 22.01.2000/vl ** Mitä muutettu: aliohjelmat muutettu cNaytto-luokan metodeiksi ** ** Tehtäviä: 1) "Pääaliohjelmien" avustus, tulosta jne. alussa toistuu ** samat lauseet. Tee aliohjelma otsikko, jonka avulla ko. ** aliohjelmat saadaan 2 rivin mittaisiksi. ** ** 2) Miksi aliohjelmiin avustus, tulosta jne viedään painettu ** näppäin parametrina. Miksei tulosteta suoraan: ** "?. Avustus" ** */ #include #include #include using namespace std; #include "dosout.h" //---------------------------------------------------------------------------- #define MERKKI_ISOKSI 1 #define KAIKKI_KELPAA NULL #define EI_OLETUSTA 0 #define RIVINVAIHTO "\r\n" //---------------------------------------------------------------------------- // Yleiskäyttöisiä apualiohjelmia: //---------------------------------------------------------------------------- #ifdef __TURBOC__ /* Syöttö Turbo-C:n mukaisesti. */ # define GETCH # include #endif char lue_merkki(void) { /* Seuraava toimii mm. Turbo C:ssä: */ #ifdef GETCH char c; while ( 1 ) { /* Korjataan funktionäppäin-vika */ c = (char)getch(); if ( c != 0 ) return c; c = (char)getch(); } #else /* Seuraava on standardin mukainen: */ char s[50]; fgets(s,50,stdin); return s[0]; #endif } char isoksi(char c) { if ( c<'a' ) return c; if ( c>'z' ) return c; return (char)(c-('a'-'A')); } char odota_nappain(const char *kelpaavat, char oletus, int isot) { char painettu; do { while ( (painettu=lue_merkki()) == 0 ); /* HUOM! korjaus! */ if (isot) painettu = isoksi(painettu); if ( oletus && ((painettu=='\n') || (painettu=='\r')) ) return oletus; } while ( kelpaavat && !strchr(kelpaavat,painettu) ); return painettu; } void odota_jotakin(void) { cout << "Paina jotakin!" << endl; odota_nappain(KAIKKI_KELPAA,EI_OLETUSTA,MERKKI_ISOKSI); } int kylla_vastaus(void) { return (odota_nappain("KE",'K',MERKKI_ISOKSI)=='K'); } void ei_toimi(void) { cout << "Ei toimi vielä!" << endl; odota_jotakin(); } void viiva(int pit, char merkki) { for (int i = 0; i