Problemas con una condición para una variable char en un do while
Tengo este código y me parece que la lógica es correcta pero al correrlo imprime doble el error antes de recibir la nueva lectura de opción tal vez por ser un char, y quiero saber cual es el problema:
#include<stdio.h>//MENU DE MATERIAS CON SWHITCH Y DOWHILE
void main()
{
char opcion;
printf("A)= Español\n");
printf("B)= Matematicas\n");
printf("C)= Historia\n");
printf("D)= Biologia\n");
printf("Opcion: ");
do{
scanf("%c",&opcion);
switch(opcion)
{
case 'A':printf("español");
break;
case 'B':printf("matematicas",160);
break;
case 'C':printf("historia");
break;
case 'D':printf("biologia");
break;
default:printf("escogiste una asignatura inexistente:");
}
}while(opcion!='A'&&opcion!='B'&&opcion!='C'&&opcion!='D');
}