我在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
. . .
答案 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)
您的输出中的第一件事是“不打开”。如果文件打开失败,请不要指望其他任何工作。
检查文件存在于程序执行的目录中。尝试使用文件名中的绝对路径而不是相对路径。
最好逐步构建这个逻辑,然后进行测试,而不是编写整个事情,然后尝试调试失败代码的一堆输出。