1.9.3 Debugging

The following is a complete listing and output of a version of the Bowling Scores program that contains statements used as debugging aids (the boxed lines). This listing demonstrates how to use such statements and what they can tell us as we peruse the output. The roll scores of the two games that served as input are

game 1?/FONT>5, 4, 6, 4, 2, 4, 1, 4, 3, 4, 8, 1, 9, 0, 10, 10, 9, 0

game 2?/FONT>9, 1, 10, 7, 3, 9, 0, 10, 10, 5, 4, 6, 4, 10, 10, 10, 8

The prompts for input are in the program. They have been omitted from the output.

#include <stdio.h>

#define TRUE 1

#define FALSE 0

main()

/* Bowling Scores calculates and prints the game scores

for a series of bowling games. It also prints the

number of games bowled, the minimum, average, and

maximum of all game scores. The input consists, for

each game, of a sequence of roll scores. Each roll

represents the number of pins knocked down on the

corresponding roll. Its input must consist of at least

one game.

Main Variables

average - average of all game scores

gamescore - score for the current game

max - current maximum game score

min - current minimum game score

number - current number of games played

total - accumulated total of all game scores

*/

{

int gamescore;

int number = 0, max = 0, total = 0, min = 300;

int newgame = TRUE;

float average;

while (newgame)

{

printf("\n CALLING GAMECALC FOR GAME #%2d",number+1);

printf("\n-----------------------------\n");

gamescore = gamecalc(gamescore);

printf("-===>RETURNING FROM GAMECALC WITH GAMESCORE");

printf(" =%3d FOR GAME #%2d\n",gamescore, number+1);

printf("CALLING UPDATE WITH; MIN TOTAL MAX NUMBER\n");

printf("%26d%5d%5d%5d\n",min,total,max,number);

update(gamescore,&number,&min,&max,&total);

printf("If you want to bowl another game enter a 1 \n");

printf("If you wish to stop enter a 0 \n");

scanf("%d",&newgame);

printf("-===>RETURNING FROM UPDATE: MIN TOTAL MAX");

printf("NUMBER\n");

printf("%33d%6d%6d%5d\n",min,total,max,number);

}

average = ((float)total)\number;

printf("FINAL RESULTS FOR ALL GAMES FOLLON:\n");

printf("***********************************\n");

printf("  ACCUMULATED TOTAL = %5d\n\n",total);

printf("    MINIMUM GAME = %5d\n",min);

printf("    AVERAGE GAME = %10.4f\n",average);

printf("    MAXIMUM GAME = %5d\n\n",max);

printf("NUMBER OF GAMES PLAYED = %3d\n",number);

}

gamecalc(gamescore)

/* calculates gamescore for the current game.

Main variables

frame - the current frame

gamescore - score for the current game

rollscore - first roll score of the current frame

r1 - succeeding roll score after rollscore

*/

int gamescore;

{

int frame, rollscore, r1;

gamescore = 0;

frame = 1;

printf("Please enter the number of pins down on this roll\n");

scanf("%d",&rollscore);

printf("Please enter the number of pins down on this roll\n");

scanf("%d",&r1);

while (frame <= 10)

{

printf(" IN GAMECALC, GOING TO FRAMECALC WITH: GAMESCORE");

printf(" FRAME ROLLSCORE R1\n");

printf("%49d%9d%9d%7d\n",gamescore,frame,rollscore, r1);

framecalc(&gamescore,&frame,&rollscore,&r1);

printf(" IN GAMECALC, RETURNING FROM FRAMECALC WITH:");

printf("GAMESCORE FRAME ROLLSCORE R1\n");

printf("%53d%9d%9d%7d\n\n",gamescore,frame,rollscore,r1);

}

return(gamescore);

}

framecalc(pgamescore,pframe,prollscore,pr1)

/* Calculates the framescore for the current game,

adds it to gamescore, increases frame by 1 and

updates rollscore and r1.

Main variables

pframe - pointer to the current frame

pgamescore - pointer to the score for the current game

prollscore - pointer to first rollscore of current frame

pr1 - pointer to next rollscore of current frame

framescore - score for current frame

r2 - rollscore after r1

*/

int *pgamescore,*pframe,*prollscore,*pr1;

{

int framescore, r2;

printf(" STARTING FRAMECALC WITH: GAMESCORE FRAME");

printf(" ROLLSCORE R1\n");

printf("%36d%9d%9d%7d\n",*pgamescore,*pframe,*prollscore,*pr1);

if(*prollscore == 10) /* it is a strike */

{

printf("Please enter the number of pins down on this");

printf(" roll\n");

scanf("%d",&r2);

framescore = 10 + *pr1 + r2;

*prollscore = *pr1;

*pr1 = r2;

printf("AFTER STRIKE, FRAMESCORE = %2d\n", framescore);

}

else if ((*prollscore + *pr1) == 10) /* it is a spare */

{

printf("Please enter the number of pins down on this");

printf(" roll\n");

scanf("%d",&r2);

framescore = 10 + r2;

printf("AFTER SPARE, FRAMESCORE= %2d\n", framescore);

*prollscore = r2;

if (*pframe < 10)

{

printf("Please enter the number of pins down");

printf(" on this roll\n");

scanf("%d",pr1);

}

}

else /* it is an open frame */

{

framescore = *prollscore + *pr1;

printf("OPEN FRAME, FRAMESCORE %2d\n",framescore);

if (*pframe < 10)

{

printf("Please enter the number of pins");

printf(" down on this roll\n");

scanf("%d",prollscore);

printf("Please enter the number of pins");

printf(" down on this roll\n");

scanf("%d",pr1);

}

}

*pgamescore = *pgamescore + framescore;

*pframe = *pframe + 1;

printf(" LEAVING FRAMECALC WITH: GAMESCORE FRAME");

printf(" ROLLSCORE R1\n");

printf("%35d%9d%9d%7d\n\n",*pgamescore,*pframe,*prollscore,*pr1);

}

update(gamescore,pnumber,pmin,pmax,ptotal)

/* This prints gamescore, and updates number, min, max

and total to reflect gamescore.

Main variables

gamescore - current game score

pnumber - pointer to current number of games

pmin - pointer to current minimum game score

pmax - pointer to current maximum game score

ptotal - pointer to total of all game scores

*/

int gamescore, *pnumber, *pmin, *pmax;

int *ptotal;

{

printf("\n BEGINNING TO UPDATE WITH: GAMESCORE");

printf(" NUMBER MIN MAX TOTAL\n");

printf("%37d%8d%8d%4d%6d\n",

gamescore, *pnumber, *pmin, *pmax, *ptotal);

*pnumber = *pnumber + 1;

*ptotal = *ptotal + gamescore;

if (gamescore < *pmin)

*pmin = gamescore;

if (gamescore > *pmax)

*pmax = gamescore;

printf(" LEAVING UPDATE WITH: GAMESCORE NUMBER");

printf(" MIN MAX TOTAL\n");

printf("%35d%8d%8d%5d%6d\n\n",

gamescore,*pnumber,*pmin,*pmax,*ptotal);

}

The output of the program is as follows.

CALLING GAMECALC FOR GAME # 1

-----------------------------

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             0        1        5       4

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                0        1        5       4

OPEN FRAME, FRAMESCORE = 9

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               9         2       6       4

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                   9        2        6       4

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             9        2        6       4

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                9        2        6       4

AFTER SPARE, FRAMESCORE = 12

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               21       3        2       4

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                  21        3        2       4

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             21       3        2       4

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                21       3        2       4

OPEN FRAME, FRAMESCORE = 6

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               27       4        1       4

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                   27       4        1       4

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             27       4        1       4

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                27       4        1       4

OPEN FRAME, FRAMESCORE = 5

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               32       5        3       4

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                   32       5        3       4

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             32       5        3       4

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                32       5        3       4

OPEN FRAME, FRAMESCORE = 7

  LEAVING FRAMECALC WITH:    GAMESCORE  FRAME  ROLLSCORE  R1

                                 39       6        8       1

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                   39       6        8       1

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             39       6        8       1

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                39       6        8       1

OPEN FRAME, FRAMESCORE = 9

  LEAVING FRAMECALC WITH:    GAMESCORE  FRAME  ROLLSCORE  R1

                                 48       7        9       0

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                   48       7        9       0

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                            48        7        9       0

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                48       7        9       0

OPEN FRAME, FRAMESCORE = 9

  LEAVING FRAMECALS WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                              57        8        10     10

  IN GAMECALC, RETURNING FROM FRAMECAL WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                 57        8        10     10

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             57       8        10     10

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               57        8        10     10

AFTER STRIKE, FRAMESCORE = 29

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                              86        9        10      9

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                  86        9        10      9

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                            86        9        10      9

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               86        9        10      9

AFTER STRIKE, FRAMESCORE = 19

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                              105       10       9       0

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                   105      10       9       0

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                            105       10       9       0

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               105       10       9       0

OPEN FRAME, FRAMESCORE = 9

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                              114       11       9       0

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                  114      11        9       0

- = = = > RETURNING FROM GAMECALC WITH GAMESCORE = 114 FOR GAME # 1

CALLING UPDATE WITH;  MIN  TOTAL  MAX  NUMBER

                      300    0     0     0

  BEGINNING TO UPDATE WITH:  GAMESCORE  NUMBER  MIN  MAX  TOTAL

                                 114      0     300   0     0

    LEAVING UPDATE WITH:  GAMESCORE  NUMBER  MIN  MAX  TOTAL

                             114        1    114  114   114

- = = = > RETURNING FROM UPDATE:  MIN  TOTAL  MAX  NUMBER

                                  114   114   114     1

CALLING GAMECALC FOR GAME # 2

-----------------------------

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             0        1        9       1

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                0        1        9       1

AFTER SPARE, FRAMESCORE = 20

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               20       2        10      7

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                   20       2        10      7

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             20       2        10      7

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                20       2        10      7

AFTER STRIKE, FRAMESCORE = 20

  LEAVING FRAMECAL WITH:  GAMESCORE  FRAME  ROOLSCORE  R1

                              40       3        7       3

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                   40       3        7       3

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             40       3        7       3

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                40       3        7       3

AFTER SPARE, FRAMESCORE = 19

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               59       4        9       0

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                   59       4        9       0

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             59       4        9       0

  STARTING FRAMECALS WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                59       4        9       0

OPEN FRAME, FRAMESCORE = 9

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               68       5        10     10

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                   68       5        10     10

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                             68       5           10     10

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               68        5        10     10

AFTER STRIKE, FRAMESCORE = 25

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                              93        6        10      5

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                  93        6        10      5

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                            93        6        10      5

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                93       6        10      5

AFTER STRIKE, FRAMESCORE = 19

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                              112       7        5       4

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                  112       7        5       4

  IN GAMCALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                 112       7        5       4

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               112       7        5       4

OPEN FRAME, FRAMESCORE = 9

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                              121       8        6       4

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                  121       8        6       4

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                            121       8        6       4

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               121        8       6       4

AFTER SPARE, FRAMESCORE = 20

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                              141       9        10     10

  IN GARAMECALC, RETURNING FROM FRAMECALC WITH: GAMESCORE FRAME ROLLSCORE R1

                                                   141      9       10    10

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                            141       9        10     10

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               141       9        10     10

AFTER STRIKE, FRAMESCORE = 30

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                              171       10       10     10

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                  171       10       10     10

  IN GAMECALC, GOING TO FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                            171       10       10     10

  STARTING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                               171       10       10     10

AFTER STRIKE, FRAMESCORE = 28

  LEAVING FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                              199      11        10      8

  IN GAMECALC, RETURNING FROM FRAMECALC WITH:  GAMESCORE  FRAME  ROLLSCORE  R1

                                                  199      11        10      8

- = = = > RETURNTING FROM GAMECALC WITH GAMESCORE = 199 FOR GAME # 2

CALLING UPDATE WITH:  MIN  TOTAL  MAX  NUMBER

                      114   114   114    1

  BEGINNING TO UPDATE WITH:  GAMESCORE  NUMBER  MIN  MAX  TOTAL

                                 199      1     114  114   114

    LEAVING UPDATE WITH:  GAMESCORE  NUMBER  MIN  MAX  TOTAL

                              199      2     114  199   313

- = = = > RETURNING FROM UPDATE:  MIN  TOTAL  MAX  NUMBER

                                  114   313   199    2

FINAL RESULTS FOR ALL GAMES FOLLOW:

***********************************

     ACCUMULATED TOTAL =  313

          MINIMUM GAME =  114

         AVERAGE GAME  =  156.5000

          MAXIMUM GAME =  199

NUMBER OF GAMES PLAYED =  2