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");
}   

(对不起,我只是无法将整个内容放在一个代码块中。我想 [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),然后通过仅在open().

于 2010-10-05T16:11:33.070 回答
0

您输出中的第一件事是“未打开”。如果文件打开失败,不要指望其他任何工作。

检查文件存在于程序执行的目录中。尝试在文件名中使用绝对路径而不是相对路径。

最好逐步构建这个逻辑,边做边测试,而不是编写整个东西,然后尝试从失败的代码中调试一堆输出。

于 2010-10-05T16:22:06.853 回答