Почему-то меню показывается два раза после того, как я введу что-либо.
scanf("%c", &choice);
Потому что вот этот scanf читает единственный символ из потока ввода, а чтобы ввести, например, 1, нужно нажать '1', а за ней следом 'enter'. '1' останется сама собой и будет прочитана первым scanf, а 'enter' превратится в '\n' и будет прочитан вторым scanf.
Чтобы этого избежать можно читать так:
scanf(" %c%*[^\n]", &choice);
Пробел перед
%c
проглотит все пробельные символы,
%*[^\n]
проглотит хвост строки после первого прочитанного не-пробельного символа.