Line 94 is just to check the progress of the solve() function for debugging purposes. I think I have all the structure in place but somewhere my logic has gone wrong, hopefully. Can someone help me with this program? I'd greatly appreciate it.

Anyway, here is an old post on a soduku solver, but it may be below you. It speaks in consideration of how to handle your 3x3 boxes.

If you're looking to make a soduku solver, you should consider writing the already known logic algorithms to your program. There a many of them already discovered. You can find most of them here and another great site here.

Here's my improved program -- it actually solves some sudoku puzzles. It doesn't, however, solve harder puzzles like some medium difficulty, and all hard and very hard puzzles I've tried. I don't see why it would solve an easy puzzle and not a hard one?

because easy puzzle "moves" are forced and therefore don't have "dead-ends". Harder puzzles require you to "guess" some positions, but later you may find those guesses where wrong so you need to reverse all numbers entered after the guess and then guess a different number.