80 likes | 189 Views
Veel faili kirjutamisest. Koosta “päeva küsimuse” programmike. Küsimusi mõtle 3, igal neist vastusevariante 3 (ja/ ei / ei tea (võib-olla vms)). Abistavat infot järgmistel slaididel.
E N D
Koosta “päeva küsimuse” programmike. Küsimusi mõtle 3, igal neist vastusevariante 3 (ja/ ei / ei tea (võib-olla vms)). Abistavat infot järgmistel slaididel.
Kuna küsimuse tekstis võivad olla funktsiooni printf-vormingut eksitavad eraldajad, nagu tühik, on sisestusfunktsiooniks seekord ‘gets’. Nimetatud funktsioon edastab kõik enne Enter-klahvi sisestatud märgid ja reavahetuskoodi parameetrina näidatud mäluväljale. NB! Programmeerija peab tagama, et mälu oleks sisestatud teksti jaoks piisavalt.
Seejärel küsitakse korduvalt vastusevariante kuni nulli sisestamiseni. “Lõputu tsükli” while(1) ja tema sees paikneva katkestamise if(!vastus)break asemel võib tsükkel alata ka näiteks kordusspetsifikatsioonideta for-lausega for(;;).Kuna protsendimärk omab printf-funktsiooni vormingus eri tähendust, on mugavam see märk deklareerida märgikonstandina. const char protsent='%'; Juhised käes - nüüd tee proge valmis.
Väikesed täiendused Et need küsimused ja vastuste jaotused ei läheks programmi töö lõpus kaduma, kirjutatakse nad logifaili ‘logi.txt’ lõppu. Seda aga vaid juhul, kui programmi käivitamisel näidatakse esimese parameetrina ‘L’-täht. Logifailide kasutamise korral on parameetriga juhitav andmete salvestamise lubamise või keelamise viis üks paindlikumaid.
Programm algab nüüd nii: int main(int argc, char *argv[]) sest kontrollitakse edastatud parameetrite arvu ja esimese väärtust. Lisandunud on järgmised deklaratsioonid ja laused programmi algusesse: int logi=0; FILE *fp; if(argc>1 && *argv[1]=='L')logi=1; if(logi)fp=fopen("logi.txt","a"); if(fp==NULL)logi=0;
Muutuja ‘logi’ väärtus määrab, kas logifaili kasutatakse. Seda tehakse juhul, kui programmi esimese parameetri esimene märk on ‘L’. Fail avatakse lisamisrežiimis (“a”) ning kui mingil vähe tõenäolisel põhjusel peaks faili avamine ebaõnnestuma, muudetakse ‘logi’ väärtus taas nulliks. Selle muutuja väärtust läheb taas vaja programmi töö lõppemisel, vahetult enne return-lauset: if(logi){ fputs(kysimus, fp); fprintf(fp, " Jah - %d, Ei - %d\n", jah, ei); fclose(fp);}
Kui programm käivitada nüüd käsuga Kysitlus L või näidata parameetri väärtus C/C++ töökeskkonna vastavas menüüs (näiteks Execute-Parameters... Dev-C++ kasutamise puhul), salvestatakse küsimus ja vastuste jaotuse lõppseis logifaili: Kas Eesti saab olümpialt kuldmedali? Jah - 10, Ei - 32