The problem is that when you enter a line from the console it has a "newline" character at the end. The gets function reads an entire line, including the newline character. But the scanf function does not generally read the newline after its input. So your scanf call is leaving the newline behind and the next gets call encounters the newline character right away and thinks it's reading a blank line. To fix the problem you need to get rid of the newline after the scanf call.
Another problem with your code is that the gets function is obsolete and no longer exists in modern C as it is considered dangerous, having been the cause of vulnerabilities in the past. You are supposed to use fgets instead, but unfortunately it is a little harder to use since it not only reads the newline from the input but also includes it in the string so you usually need to remove it.
Code:
#include <stdio.h>
#include <string.h>
#define STR_SIZE 50
#define YOUNG_AGE 22
int main()
{
char name[STR_SIZE], town[STR_SIZE], *p;
int age;
printf("Hi, what`s your name? ");
fgets(name, STR_SIZE, stdin);
// Remove the newline character from the string.
p = strchr(name, '\n');
if (p) *p = '\0';
printf("Welcome to our show, %s.\n", name);
printf("How old are you? ");
scanf("%d", &age);
// Remove the newline character from the input buffer.
while (getchar() != '\n') ;
if (age > YOUNG_AGE)
printf("Hmm, you don`t look a day over %d.\n", YOUNG_AGE);
printf("Tell me, %s, where do you live? ", name);
fgets(town, STR_SIZE, stdin);
// Remove the newline character from the string.
p = strchr(town, '\n');
if (p) *p = '\0';
printf("Oh, I`ve heard %s is a lovely place.\n", town);
return 0;
}