2

试图将一个文件从文件中的第一个字节读取到用户指定的字节。我需要逻辑上的帮助。例如,如果文件只有字母 a 到 z,我只想读取并显示前 10 个。这是我写的一段:

  char byte;
  inFile.seekg(0L,ios::beg);
  inFile.get(byte);
  cout << byte;

  for(int i = 0; i < num; i++);  //num is an int specified by the user.
  {
      inFile.seekg(1, ios::cur);
      inFile.get(byte);
      cout << byte;
  }
4

1 回答 1

1

第一个问题 - 行尾的分号for()

    for(int i = 0; i < num; i++);
    {
        ...
    }

编译器看到的实际上是这样的:

    for(int i = 0; i < num; i++) { /* do nothing num times */ }

    {
        // code that will only run once
    }

所以,去掉分号。

接下来,如果您只是连续读取字节,则无需在每个字节之间进行查找。只需调用get()将获得序列中的下一个字节。所以删除seekg()电话。

最后一个问题 - 这个函数实际上inFile.get()总共调用了num + 1几次。第一次调用是在for循环之前。然后在for循环中,get()称为num次数(即 i = 0, 1, 2, 3 ... num-1)。您可以通过将for循环计数器更改为(i = 1; i < num; i++)或仅在循环之前删除get()调用来解决此问题for。在下面的代码中,我选择了第二种方式:

void run(int num, istream &inFile)
{
    char byte;

    for(int i = 0; i < num; i++)
    {
        inFile.get(byte);
        cout << byte;
    }
}
于 2013-04-05T08:09:23.180 回答