Замена прерывания клавиатуры (прерывание 9) делает два вызова, а не один - PullRequest
0 голосов
/ 25 января 2019

Каждое нажатие на клавиатуру дважды вводит функцию, которая заменила прерывание. Почему это происходит?

Может быть, "enter" после scanf мешает? Но это касается функции дважды при каждом нажатии, а не только после первой попытки

Что я делаю не так? Как сделать так, чтобы он входил в функцию только один раз для одного нажатия каждый раз? На картинке видно, что я нажимаю 5 только дважды вместо 5

enter image description here

#include<stdio.h>
#include<dos.h>

volatile int ctrl_break_flag;   //counter
void interrupt(*Int9Save)(void);   


void interrupt my_func8(void)
{
  ctrl_break_flag++;
  printf("%d\n",ctrl_break_flag);
  Int9Save();
  }
void main()
{
 int N=0,i;
 Int9Save=getvect(9); //Save pointer to original interrupt.
 printf("Please enter number: ");
 scanf("%d",&N);
 setvect(9,my_func8);//Set interrupt pointer to our function.
 ctrl_break_flag=0;

 while(ctrl_break_flag<N);
   printf("End");
 setvect(9,Int9Save);//Return to original interrupt.
 return;
}
...