2

strfile.cpp のコード:

#include <fstream>
#include <iostream>
#include <assert.h>

#define SZ 100

using namespace std;

int main(){
char buf[SZ];
{
    ifstream in("strfile.cpp");
    assert(in);
    ofstream out("strfile.out");
    assert(out);
    int i = 1;

    while(!in.eof()){
        if(in.get(buf, SZ))
            int a = in.get();
        else{
            cout << buf << endl;
            out << i++ << ": " << buf << endl;
            continue;
        }
        cout << buf << endl;
        out << i++ << ": " << buf << endl;
    }
}
return 0;
}

strfile.out以外のすべてのファイルを操作したい:

1: #include <fstream>
2: #include <iostream>
3: #include <assert.h>
4: ...(many empty line)

fstream.getline(char*, int) この関数で管理できることは知っていますが、関数「fstream.get()」を使用するだけでこれを行う方法を知りたいです。

4

1 に答える 1

1

ifstream::get(char*,streamsize)はデリミタ (この場合は ) をストリームに残すため\n、呼び出しは決して進まないため、呼び出し元のプログラムには空白行を際限なく読んでいるように見えます。

代わりに、改行がストリームで待機しているかどうかを判断し、in.get()orを使用してそれを通過する必要がありin.ignore(1)ます。

ifstream in("strfile.cpp");
ofstream out("strfile.out");

int i = 1;
out << i << ": ";

while (in.good()) {
    if (in.peek() == '\n') {
        // in.get(buf, SZ) won't read newlines
        in.get();
        out << endl << i++ << ": ";
    } else {
        in.get(buf, SZ);
        out << buf;      // we only output the buffer contents, no newline
    }
}

// output the hanging \n
out << endl;

in.close();
out.close();
于 2012-07-12T14:12:00.640 に答える