Ты используешь перед этим такой вызов:
cin >> x;
что он делает? Грубо говоря, он считывает с потока строку, потом ее в int "превращает". Символ перехода на новую строку он оставляет в потоке. У тебя же не должен символ \n попасть в число? Вот следующим вызовом твоя gets и читает этот \n оставшийся в потоке, считая что ты ввел пустую строку. Это нормальное поведение, так и должно быть.
Вызывай два раза, чтобы избавится от этого. Желательно вызывать один раз сразу после ввода (чтобы в вызове функции сразу же убрать символ перехода из потока), чтобы не запутаться. Тогда после вызова гарантировано все будет работать, как ожидается при любом вызове.
Добавлено через 20 минут 22 секунды
Вот, посмотри здесь пример кода программы, в котором то же самое:
http://www.cyberforum.ru/cpp-beginners/thread20266/post89643.html
Просто использовано два вызова get. Один - чтобы снять с потока, что там осталось, а второй, чтобы ожидать нажатия от пользователя.