0

今天是个好日子

我想在读取指定数量的字符后插入一个点(或任何其他字符)(在我的情况下是 2)

所以这是我的代码:

#include <fstream>
#include <string>

using namespace std;

string dot = ".";        //Char to insert
char ch;
unsigned i=0;          //Symbol counter
int counter = 2;       //How much letters to skip before insertion


int main(){

fstream fin("file.txt", fstream::in);

while (fin >> noskipws >> ch) {

  ofstream file;
  file.open ("file2.txt");
  file << ch;
  file.close();
  i++;
       if(i == counter){
       file.open ("file2.txt");
           file << dot;
       file.close();
       i = 0;
       }
    }
 return 0;
}

我在新的 file2.txt 中写的是“0”。

PS我在C ++中很新,所以请深入解释新手(如果你有时间)

先感谢您。

编辑:应用一些修复后,输出现在是“。”

EDIT2:它不允许我回答我自己的帖子(因为我是这个论坛的新手,必须等待 7 小时才能回答),我将在这里发布我的固定代码

固定版本:

#include <fstream>
#include <string>

using namespace std;

string dot = ".";        //Char to insert
char ch;
unsigned i = 0;          //Symbol counter
int counter = 2;         //How much letters to skip before insertion


int main(){

ofstream file;
file.open ("file2.txt");
fstream fin("file.txt", fstream::in);

while (fin >> noskipws >> ch) {

  file << ch;
  i++;
       if(i == counter){
           file << dot;
           i = 0;
       }
    }
  file.close();
  fin.close();
 return 0;
}

谢谢大家的回复。

4

4 回答 4

1

对于像这样的简单应用程序,在开始阅读之前打开输出文件,在完成之前不要关闭它。如所写,每次读取字符时都会打开输出文件,然后覆盖之前文件中的任何内容。您可以在附加模式下打开文件以在最后粘贴新数据,但保持打开状态更简单(也更快)。

于 2013-08-27T16:22:59.433 回答
0

每次向输出文件写入内容时,打开它,写入输出,然后关闭它。由于您打开文件的方式,您的每次写入都从文件的开头开始。

相反,如果您将输出文件保持打开状态,直到完成所有数据的写入,则下一次写入将在前一次写入结束的点继续,产生您期望的输出序列。

    ofstream file;
    file.open("file2.txt");

    while (fin >> noskipws >> ch) {
        file << ch;
        i++;
        if (i == counter) {
            file << dot;
            i = 0;
        }
    }
于 2013-08-27T16:30:24.387 回答
0

只需在开头打开文件,更新它,最后关闭所有文件。

 ofstream file;               <------------+
 file.open ("file2.txt");                  |
                                           |
while (fin >> noskipws >> ch) {            |
                                           |
//ofstream file;           ---+            |
                              +----->------+
//file.open ("file2.txt"); ---+

  file << ch;
//file.close();
  i++;
       if(i == counter){
       //file.open ("file2.txt");
         file << dot;
       //file.close();
        i=0;
       }
    }
//Close files
    file.close(); 
    fin.close() ;
于 2013-08-27T16:31:23.203 回答
0

当您在循环中写入文件时,您很可能希望在循环之外打开文件。通常,当您打开文件进行写入时,旧的内容将被覆盖。

所以这样做:

ofstream file ("file2.txt")
while (...)
{
   ...
   file << ....
   ...
}
于 2013-08-27T16:33:38.663 回答