istream在DEV C ++中不起作用

时间:2010-10-05 16:04:06

标签: c++ file-io ifstream

我在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 . . .

2 个答案:

答案 0 :(得分:3)

tellg() indicates failure的返回值-1。检查文件路径是否正确。您的输出清楚地表明该文件无法打开。如果无法打开文件,则不应对该文件执行读/写操作,或者在此情况下执行流。

修改

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

这里prime2.txt的位置是相对的。由于您更改了编译器,因此很有可能无法找到该文件。首先尝试使用一些绝对值(例如C:\myprograms\test\prime2.txt),然后通过仅在open()中指定prim2.txt来确定将程序的prime2.txt放在何处以获取它。

答案 1 :(得分:0)

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

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

最好逐步构建这个逻辑,然后进行测试,而不是编写整个事情,然后尝试调试失败代码的一堆输出。