Better way to avoid duplicated printing?

I would look for a transition (ie. is now high but was low) and throw in a debounce (say, 20 mS).

eg.

  if (buttonState == HIGH && oldButtonState == LOW) 
    {     
    delay (20);
     // blah blah

    }  // end of button pressed

  oldButtonState = buttonState;