Effective Communication of Software Requirements

What is the most effective way to get a customer to clearly explain the requirements for software? Time and again I fail to fully get the full set of requirements from my customers or get an incorrect interpretation. It isn’t that I don’t ask questions or that the customers don’t give me details, but rather it seems that the different perspectives on the requirements lead to many misunderstandings from both parties.

I’m not trying to nail down every requirement up front - just attempting to get an accurate representation of the requirements I do ask for from the customer. It often seems that a each party understands a particular requirement differently which leads to confusion, frustration, and stalled projects.

Perhaps using more detailed scenarios where the customer can give a step by step description of how they expect the software to work. Maybe having them give a more visual representation of the software using pictures and flow charts. Perhaps better questions. Maybe a combination of all the above. I wonder if certain methods work better with certain customers?

Either way, there must be a better way to collect requirements.