0

DEV c++ で ifstream 操作と ofstream 操作を使用していますが、正しく動作していないようです。素数ジェネレーターのコードを少し書こうとしましたが、うまくいきません :\ 任意の時点で fstream::tellg() を表示すると、-1 が表示されます:

#include<iostream>
#include<math.h>
#include<fstream>
using namespace std;
int prime (unsigned long long n)
{   
    ifstream f1; 
    ofstream f2;             
    unsigned long long i,m,root;
    int flag=0;
    for(i=2;i<=n;i++)
    {   
        f1.open("prime2.txt",ios::binary);    
        if(!f1.is_open())
        {   
            cout<<"NOT OPEN";    
        }              
        cout<<f1.tellg()<<" ";      //Displaying getpointer pos    
        flag=0;
        root=(unsigned long long)sqrt(i);
        while(f1.read((char*)&m,sizeof(m)))
        {   
            if((i%m)==0)
            {   
                flag=1;
                break;
            }      
            if(m>root)
            {   
                break;
            }                                       
        }             
        f1.close();
        if(!flag)
        {   
            f2.open("prime2.txt",ios::app|ios::binary);
            f2.write((char*)&i,sizeof(i));
            cout<<i<<" ";             //Displaying num being written
            f2.close();
        }   
    }    
    return 1;
}   

int main(int argc, char* argv[])
{   
    prime(50);
    system("pause");
}   

(申し訳ありませんが、すべてを 1 つのコードブロックに収めることができませんでした。[code] タグに何か問題があるのでしょうか?)

出力:

NOT OPEN-1 2 -1 3 -1 4 -1 5 -1 6 -1 7 -1 8 -1 9 -1 10 -1 11 -1 12 -1 13 -1 14 -1 15 -1 16 -1 17 -1 18 -1 19 -1 20 -1 21 -1 22 -1 23 -1 24 -1 25 -1 26 -1 27 -1 2 8 -1 29 -1 30 -1 31 -1 32 -1 33 -1 34 -1 35 -1 36 -1 37 -1 38 -1 39 -1 40 -1 41 -1 42 -1 43 -1 44 -1 45 -1 46 -1 47 -1 48 -1 49 -1 50 Press any key to continue . . .

4

2 に答える 2

3

の戻り値 -1tellg() は失敗を示します。ファイルパスが正しいことを確認してください。出力は、ファイルを開くことができないことを明確に示しています。ファイルを開くことができない場合は、ファイルに対して読み取り/書き込み操作を実行しないでください。この場合はストリームです。

編集

f1.open("prime2.txt",ios::binary);

ここで、prime2.txt の場所は相対的です。コンパイラを変更したため、ファイルが見つからない可能性が高くなります。最初にいくつかの絶対値 ( などC:\myprograms\test\prime2.txt) を試してから、 で prim2.txt を指定するだけで、プログラムの prime2.txt を配置する場所を見つけてくださいopen()

于 2010-10-05T16:11:33.070 に答える
0

The first thing in your ouput is 'NOT OPEN'. If file open fails, don't expect anything else to work.

Check file is present in the dir where your program executes. Try with absolute path in the filename instead of relative.

It might be better to build this logic up step by step, testing as you go, instead of writing the whole thing and then trying to debug a pile of output from failing code.

于 2010-10-05T16:22:06.853 に答える