Итак, я нашел вашу проблему: когда вы нажимали «Enter» после ввода «миль», это «Enter» регистрировалось как ввод, как символ «\ n». У меня есть решение для вас, но если вы не предпочитаете его, просто создайте особый случай, в котором вы игнорируете символ '\ n'. Что-то вроде else if (dir == '\n') continue;
. Я подозревал, что это может быть проблемой, но подтвердил это, напечатав этот «недопустимый символ».
int main()
{
float x = 0, y = 0;
char dir;
float mile;
do
{
printf("Enter input direction as N,S,E,W (0 to exit): ");
scanf("%c", &dir);
switch (dir)
{
case 'N':
printf("Input mile in %c dir: ", dir);
scanf("%f", &mile);
y += mile;
break;
case 'S':
printf("Input mile in %c dir: ", dir);
scanf("%f", &mile);
y -= mile;
break;
case 'E':
printf("Input mile in %c dir: ", dir);
scanf("%f", &mile);
x += mile;
break;
case 'W':
printf("Input mile in %c dir: ", dir);
scanf("%f", &mile);
x -= mile;
break;
case '\n':
break;
case '0':
break;
default:
printf("Invalid Direction, re-enter; You entered: %c \n", dir);
break;
}
}while (dir != '0');
printf("\nCurrent position of A: (%4.2f, %4.2f)\n", x, y);
return 0;
}