Why is my program running an infinite loop