Буферизованное чтение из stdin с использованием fread в C

Я пытаюсь эффективно читать изstdin используяsetvbuf в режиме `_IOFBF ~. Я новичок в буферизации. я ищуза работой Примеры.

Ввод начинается с двух целых чисел (n,k). Следующийn строки ввода содержат 1 целое число. Цель состоит в том, чтобы напечатать, сколько целых чисел делится наk.

#define BUFSIZE 32
int main(){
  int n, k, tmp, ans=0, i, j;
  char buf[BUFSIZE+1] = {'0'};
  setvbuf(stdin, (char*)NULL, _IONBF, 0);
  scanf("%d%d\n", &n, &k);
  while(n>0 && fread(buf, (size_t)1, (size_t)BUFSIZE, stdin)){
    i=0; j=0;
    while(n>0 && sscanf(buf+j, "%d%n", &tmp, &i)){
    //printf("tmp %d - scan %d\n",tmp,i); //for debugging
      if(tmp%k==0)  ++ans;
      j += i; //increment the position where sscanf should read from
      --n;
    }
  }
  printf("%d", ans);
  return 0;
}

Проблема в том, что если число на границе,буфер buf буду читать23 от2354\n, когда он должен был прочитать2354 (чего не может) или вообще ничего.

Как я могу решить эту проблему?

редактировать
Решено сейчас (с анализом).

редактировать
Полная спецификация проблемы

Ответы на вопрос(11)

Ваш ответ на вопрос