大文件的std :: cin错误

时间:2017-09-27 10:54:15

标签: c++ c++11

我正在使用大输入(1Mb整数文本文件,由制表符,空格或结束线分隔)对一些I / O代码进行基准测试,然后是正常的cin方法

int temp;
cin >> temp;
while(temp!=0){ cin >> temp;}

进入无限循环,临时值为15 ,但输入文件中没有这么长的序列

煮熟的整数解析方法,然而fread很好 时钟时间约为0.02ms

void readAhead(size_t amount){
  size_t remaining = stdinDataEnd - stdinPos;
  if (remaining < amount){
    memmove(stdinBuffer, stdinPos, remaining);

    size_t sz = fread(stdinBuffer + remaining, 1, sizeof(stdinBuffer) - remaining, stdin);

    stdinPos = stdinBuffer;

    stdinDataEnd = stdinBuffer + remaining + sz;

    if (stdinDataEnd != stdinBuffer + sizeof(stdinBuffer)){
      *stdinDataEnd = 0;
    }
  }
}

int readInt(){
  readAhead(16);

  int x = 0;
  bool neg = false;
  // Skipp whitespace manually
  while(*stdinPos == ' ' || *stdinPos == '\n' || *stdinPos == '\t'){
    ++stdinPos;
  }

  if (*stdinPos == '-') {
    ++stdinPos;
    neg = true;
  }

  while (*stdinPos >= '0' && *stdinPos <= '9') {
    x *= 10;
    x += *stdinPos - '0';
    ++stdinPos;
  }

  return neg ? -x : x;
}

关于cin如何被卡住的任何方向?

0 个答案:

没有答案