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