Gepuffertes Lesen von stdin mit fread in C

Ich versuche effizient zu Lesen von der stdin mithilfe setvbuf im `_IOFBF~ Modus. Ich bin neu in der Pufferung. Ich bin auf der Suche nach arbeiten Beispiele.

Die Eingabe beginnt mit zwei Ganzzahlen (n,k). Die nächste n Zeilen der Eingabe enthalten 1 ganze Zahl. Ziel ist es, zu drucken, wie viele ganze zahlen sind teilbar durch 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;
}

Das problem ist, wenn die Zahl ist an der Grenze, die Puffer buf Lesen 23 aus 2354\n, wenn es sollte entweder Lesen 2354 (was es nicht) oder gar nichts.

Wie kann ich dieses Problem lösen?


Bearbeiten

Jetzt behoben (mit Analyse).

Bearbeiten

Komplette Problem-Spezifikation

Schreibe einen Kommentar