process scheduling – SIGALRM not terminating a program after the specified time

I have written a C code, where the aim is to take N as an input and then create N processes and create some children of their own. Finally, each process sends each other SIGUSR1 signal after every 2 second. The idea is to close all the process after 10 seconds using SIGALRM but the program doesn’t terminate. If a take N as an input through command line, the program works but if taken through scanf, it somehow breaks. TIA

int main(void){

  int n;
  printf("enter N - ");
  scanf("%d", &n);

  int id1 = 1, id2 = 1;    //////// ids for tracking the process
  for(int i = 0; i<n; ++i){
    if(id1>0 && id2>0){     /////// only the grandparent can enter
      id1 = fork();
      int z = getpid()%13;
      for(int j = 0; j<z; ++j){
        if(id2>0 && id1==0)          //////// only the parent can enter
          id2 = fork();

  alarm(10);          ///////// alarm for 10 seconds after which process stops sending SIGUSR1 and exits

  while(1){                       /////// SIGUSR1 signal
    for(int i = 1; i<13; ++i)
      kill(getpid()+i, SIGUSR1);

  for(int i = 0; i<n*13; ++i)