Avatar billede dejbjerg Nybegynder
03. juni 2001 - 00:08 Der er 2 kommentarer og
1 løsning

eof() Hvorfor virker følgende ikke?

Jeg er ved at lave et meget simpelt fil-krypterings program.

Det jeg gerne vil vide er hvorfor keyFilen kun læses en gang.

med cout << chk; læser jeg output fra keyFilen
og får følgende resultat. (indholdet af keyFile.txt er \"Dette er keyfilen\", indholdet af textFile.txt er \"Dette er den tekst som skal kodes\".)

Dette er keyfilendddddddddddddd (omtrent)

Hvorfor??

// includes
#include <iostream>
#include <fstream>

// namespace
using namespace std;

// function declarations
int encrypt();
//int decrypt();

// main
int main()
{
encrypt();
//decrypt();
return 0;
}

// the encrypt function
int encrypt()
{
    char cht, chk, chc;
    cht = chk = chc = 0;

ifstream keyFile(\"keyFile.txt\");
ifstream textFile(\"textFile.txt\");

ofstream outFile(\"codeFile.txt\");
   
    while (textFile)
    {
   
        textFile.get(cht);
       
        if (textFile.eof())
            return 0;
       
        keyFile.get(chk);
       
        if (keyFile.eof())
        {
        ifstream keyFile(\"keyFile.txt\");
        keyFile.get(chk);
        }

        cout << chk;
       
        chc = cht + chk;
        outFile.put(chc);   
    }

return 0;
}

Har en if-sætning sit eget scope?
Avatar billede stigc Nybegynder
03. juni 2001 - 15:29 #1
ja, en if sætning ar sit eget scope! Du må finde en funktion i ifstream der kan sætte curseren til starten af filen igen.
Avatar billede dejbjerg Nybegynder
04. juni 2001 - 02:09 #2
>> stigc .. Tak for svaret.

Jeg har prøvet med keyFile.seekg(0, ios::beg), men if(keyFile.eof()) betyder samtidig at streamen keyFile lukkes.

Jeg kunne gøre et eller andet med .seekg(0, ios::end), .tellg(), et par variable og lidt mellemregning, men jeg leder efter en simplere løsning.

Der må da være en måde at gøre en fstream global, selvom den kaldes fra en if sætning i en funktion.
Avatar billede dejbjerg Nybegynder
05. juni 2001 - 14:50 #3
Det er ikke kønt men det virker..

int encrypt()
{
    char cht, chk, chc;
    cht = chk = chc = 0;

ifstream keyFile(\"keyFile.txt\");
ifstream textFile(\"textFile.txt\");

ofstream outFile(\"codeFile.txt\");
   
    while (textFile)
    {
   
        keyFile.seekg(0, ios::end);   
        int endpos = keyFile.tellg();
        keyFile.seekg(0, ios::beg);
       
        for (int i = 0; i < endpos; i++)
        {
            textFile.get(cht);
       
            if (textFile.eof())
                return 0;
           
            keyFile.seekg(i);
            keyFile.get(chk);
       
            if (i == endpos - 1)
                i = -1;

            chc = cht + chk;
            outFile.put(chc);
        }   
    }

return 0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester