3.12.1 Esimerkki

Tutkitaan seuraavan ohjelman toimintaa debuggerin avulla.

/* *********************************************************
TUTKI2.CPP
  Tutkitaan muuttujien arvoja debuggerin avulla.
  Ohjelman pitäisi laskea lämpötilojen keskiarvo annetuilta
  päiviltä.
********************************************************* */

#include <iostream.h>

int main(void)
{
  int lkm, kpl;
  double lampo, summa;

  cout << "Tämä on testiohjelma debuggeria varten.\n" << endl;
  lkm = 98;                  // sijoitetaan muuttujille arvoja
  lampo = 0;
  kpl = 0;
  summa = 0;
  cout << "Monenko päivän lämpötilojen keskiarvo lasketaan? ";
  cin >> lkm;      // luetaan lkm-muuttujalle arvo käyttäjältä
  while (kpl < lkm) {
    kpl = kpl + 1;
    cout << kpl << ". päivän lämpötila > ";
    cin >> lampo;
    summa = lampo + 1;      // !!!! Virhe: Summa kasvaa väärin
  }

  if (kpl > 0)
    cout << "Lämpötilojen keskiarvo: " << summa/kpl << endl;

  return 0;
}
-  File  Edit  Search  Run  Compile  Debug  Project  Options    Window  Help
+-[_]----------------------------- D:TUTKI2.CPP -------------------------1-[^]-+
¦#include <iostream.h>                                                         _
¦                                                                              _
¦int main(void)                                                                _
¦{                                                                             _
¦  int lkm, kpl;                                                               _
¦  double lampo, summa;                                                        _
¦                                                                              _
¦  cout << "Tämä on testiohjelma debuggeria varten.\n" << endl;                _
¦  lkm = 98;                  // sijoitetaan muuttujille arvoja                _
¦  lampo = 0;                                                                  _
¦  kpl = 0;                                                                    _
¦  summa = 0;                                                                  _
¦                                                                              _
¦                                                                    
+----------------------------------- Watch ------------------------------2-----+
¦ lkm: 98                                                                      ¦
¦ kpl: 2320                                                                    ¦
¦ lampo: 0.0                                                                   ¦
¦ summa: 1.50375018682425e-264                                                 ¦                       ¦                                                                              ¦
¦                                                                              ¦
+------------------------------------------------------------------------------+

Alla olevassa kuvassa tutkinta on edennyt varjostetulle riville saakka. Watch-ikkunasta näkyvät ko. tilanteen muuttujien arvot. Huomaa, että muuttujan kpl arvo ei ole vielä muuttunut, sillä varjostettua riviä ei ole vielä suoritettu (varjostus merkitsee siis sitä, että ko. rivi suoritetaan seuraavaksi).

Huomasit varmaan, että ohjelmassa oli yksi virhe: summa-muuttujan kasvattamislause

summa = lampo + 1;

ei tee sitä, mitä pitäisi. Miten muuttujan summa arvo muuttuu lauseen suorituksen jälkeen? Korjaa lause toimivaksi ja kokeile debuggausta uudelleen.