2017-08-19 1 views
-1

私がここでやりたいことは、はじめに最初に単語 "hello"を印刷してから、行をスキップしてファイルにもう一度印刷します。スキップする必要がある行の数は、ユーザーによって指定されます。ファイルは空でも空でもない場合もありますが、空でない場合は、印刷する必要がある行以外の行のデータを変更したくありません。ファイルが空の場合は、空の行をスキップして、いくつかの行の後に印刷する必要があります。ここいくつかの空白行の後で出力をファイルに出力する方法

は私のコードである:

#include <iostream> 
#include <string> 

#include <fstream> 
using namespace std; 

int main(){ 
    ifstream f1("temp.txt"); 
    ofstream f2("temp.txt"); 

    int r; 
    cout << "Enter number of lines to skip:" ; 
    cin >> r; 

    f2 << "hello"; 
    string org = ""; 

    while(--r){ 

     getline(f1, org); 

     cout << "org: "<< endl; 

    } 

    int pos = f1.tellg(); 
    cout << "pos: " << pos << endl; 
    f2.seekp(pos, f2.beg); 
    f2 << "hello"; 

} 

Iは、I入力r = 3、例えば、ファイルが空である場合、受信出力:

org: 
org: 
pos: -1 

はまた、ファイルが空のままです。出力はありません。 tellg()が機能していないようです。 誰もここで何をすべきか考えていますか?

+0

同じファイルを読み書きすることはできません。出力には一時ファイルを使用し、元のファイルとして名前を変更します(両方のファイルを閉じた後に)。 –

+1

あなたは一度にたくさんの新しいことをしようとしています。問題をより小さく、より単純な問題に分解し、一度に1つずつ取り組んでください。 – Beta

答えて

0

まず、同じファイルを読み書きしないでください。ファイルは異なるモードで開かれるので、これは動作しません。しかし、それとは別に、あなたの入力を解析し、それをメモリ上で操作して、望ましい結果を書き出すほうが良い習慣です。そのファイルを開いて興味のあるものを読んで(面白い行がある地図を保存したり、すべてをメモリに読み込んだりして)、その上で操作して結果を書き出します。

関連する問題