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');
}

Añade tu respuesta

Haz clic para o