c ++从文件开头读取到指定的字节

时间:2013-04-04 23:08:41

标签: c++ seekg

尝试将从文件中第一个字节读取的文件写入用户指定的字节。我需要有关逻辑的帮助。如果文件只有字母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;
  }

1 个答案:

答案 0 :(得分: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;
    }
}