Στο πρώτο while loop έχεις γράψει
while(x != '\n') { ... } το οποίο σημαίνει πως το '\n' της πρώτης γραμμής θα διαβαστεί απο το x.
Έπειτα ανάμεσα στα δύο while έχεις SKIP_LINE(), το οποίο περιμένει να διαβάσει και να κάνει discard τα πάντα μέχρι το επόμενο '\n'.
Τέλος στο 2ο while(y != '\n') διαβάζεις από την είσοδο το κλειδί μέχρι το y να διαβάσει το '\n' ξανά.
Συνολικά ο κώδικάς σου απαιτεί 3 γραμμές εισόδου, το οποίο προκαλείται από το περιττό SKIP_LINE() μετά το πρώτο while.