c++ program produces bad results