istream не работает в DEV C ++ - PullRequest
0 голосов
/ 05 октября 2010

Я использую операции ifstream и ofstream в DEV c ++, но, похоже, они работают неправильно. Я пытался написать небольшой простой генератор кода, но он не работает: \ Когда я в любой момент отображаю 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 ]

3 голосов
/ 05 октября 2010

Возвращаемое значение -1 из tellg() указывает на ошибку . Проверьте правильность пути к файлу. Ваш вывод ясно указывает на то, что файл не может быть открыт. Если файл не может быть открыт, вы не должны выполнять операцию чтения / записи над файлом или в этом случае потоком.

EDIT

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

Здесь местоположение prime2.txt является относительным. Так как вы изменили компилятор, есть большая вероятность, что файл не найден. Попробуйте сначала с каким-то абсолютным значением (например, C:\myprograms\test\prime2.txt), а затем выясните, куда поместить файл prime2.txt для вашей программы, указав только prim2.txt в open().

0 голосов
/ 05 октября 2010

Первая вещь в вашем выходе - «НЕ ОТКРЫТО».Если открытие файла не удастся, не ожидайте, что что-то еще будет работать.

Проверьте, что файл присутствует в каталоге, где выполняется ваша программа.Попробуйте использовать абсолютный путь в имени файла вместо относительного.

Возможно, было бы лучше построить эту логику шаг за шагом, тестируя на ходу, вместо того, чтобы писать все целиком, а затем пытаться отладить кучу выходных данных из-за неисправного кода.

...