-1

直截了当我的问题是:如何让文件指针指向下一行?下面给出的是我整个程序的一部分:

         void filewrite(fstream &f2)
         {
            f2.seekp(0,ios::beg);
            f2.write(customerno,strlen(customerno));
            f2.seekp(24,ios::beg);
            f2.write(customername,strlen(customername));
            f2.seekp(56,ios::beg);
            f2.write(product,strlen(product));
            f2<<endl;
         }

这里 f2 是文件指针 customerno,customername 和 product 是字符串 0,24 和 56 是这些字符串从头开始的位置

我面临的问题是,每次我试图写一条新记录时,它都会写完前一条记录,而不是进入下一行。

我希望每条新记录都与第 0、第 24 和第 56 位对齐。我该怎么做?提前致谢。

4

2 回答 2

1

如果你使用这种方法,你就是给自己一个具有挑战性的问题。你想用std::setw()它来为你做这件事。

这是一个更简单的方法来做到这一点:

#include <fstream>
#include <iomanip>
using namespace std; 
void filewrite(ofstream &f, string customerno, string customername, string product)
{
   f << left << setw(24) << customerno << setw(32) << customername << product << endl;
}
于 2018-05-11T20:09:31.367 回答
0

我不知道,如果我的问题是正确的,但如果你想确保在当前行内寻找,你可以这样做:

void filewrite(fstream &f2)
{
  long pos = f2.tellp();

  f2.seekp(pos + 0);
  f2.write(customerno,strlen(customerno));
  f2.seekp(pos + 24);
  f2.write(customername,strlen(customername));
  f2.seekp(pos + 56);
  f2.write(product,strlen(product));
  f2<<endl;
}

这只能按预期工作,但如果您可以确保在调用函数 filewrite 时文件流位于下一行的开头。

否则我会很复杂地找到光标在流中的正确位置。

于 2018-05-11T20:03:22.927 回答