Я пытаюсь эффективно читать из 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
(что не может), либо ничего вообще.
Как я могу решить эту проблему?
Редактировать
Решено сейчас (с анализом) .
Редактировать
Полная спецификация задачи