zapis i odczyt z plików

zapis i odczyt z plików
4M
  • Rejestracja:około 4 lata
  • Ostatnio:ponad rok
  • Postów:30
0

Cześć, mam na zaliczenie program, który zaszyfruje wiadomość. Moje pytanie jest takie co zrobić, aby plik klucz był tworzony automatycznie przez program, bo aktualnie musi już taki istnieć by to działało, czy można w inny sposób zapisać do pliku b ? Bo, gdy robię klucz << 'A' + x to zapisują mi się liczby zamiast liter i czy funkcja void dobrze wygląda?

Kopiuj
void szyfruj(fstream &klucz, string &tab)
{
    int wielkosc_znaku;
    char a,b;

    for(int i = 0; i < tab.size(); i++)
    {
        //ustalenie wielkosci litery - funkcja sprawdz zwraca (0, gdy litera jest mała / 1, gdy duża / 2 gdy nie jest literą)
        wielkosc_znaku = sprawdz(tab[i]);

        if(wielkosc_znaku < 2) //Wykonaj, jeśli znak jest literą - szyfruje tylko znaki będące literami
        {
            if(wielkosc_znaku == 0) a = 'a';
            else a = 'A';
            
            int x = los();
            
            tab[i] = ( ( (tab[i]-a) + x ) % 26) + a;
            b = 'A' + x;
            klucz << b;
        }
    } 
}

int main()
{
      fstream klucz;

      klucz.open(nazwa_klucza, ios::out | ios::in);
      ...
      klucz.close();



return 0;
}
edytowany 1x, ostatnio: 4matey
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:14 dni
0
Kopiuj
ofstream keyWrite(keyName);
keyWrite<<"text";
keyWrite.close();
...
ifstream keyRead(keyName);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
4M
Takie pytanie ofstream keyWrite(keyName); od razu otwiera plik tak? I jeszcze czy można w inny sposób zrobić to : b = 'A' + x; klucz << b; mam na myśli bez zmiennej b ?
_13th_Dragon
klucz<<(char)('A' + x);
4M
  • Rejestracja:około 4 lata
  • Ostatnio:ponad rok
  • Postów:30
0
Kopiuj
 cin >> odpowiedz;

        szyfr.open(zapis, ios::out);

        switch(odpowiedz)
        {
            case 1: //otworzenie pliku do nadpisania klucza
            ofstream keyWrite(nazwa_klucza);

            while(getline(plik,wiersz))
            {
                szyfr << szyfruj(keyWrite,wiersz) + "\n";
            }

            keyWrite.close();
            break;

            case 2:
            ifstream keyRead(nazwa_klucza);
            while(getline(plik,wiersz))
            {
                deszyfruj(keyRead, wiersz);
                szyfr << wiersz + "\n";
            }
            keyRead.close();

transfer of control bypasses initialization of: -- variable "keyWrite"

Jak mam to zrobić, bo niezbyt rozumiem czemu to nie działa?

4M
Dobra już ogarnąłem wystarczyło dać nawiasy po case. Takie pytanko kiedy trzeba je stosować, a kiedy można pominąć?
enedil
Musisz je stosować, gdy chcesz deklarować nowe zmienne.
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:14 dni
0
Kopiuj
            for(ofstream key(nazwa_klucza);getline(plik,wiersz);) szyfr<<szyfruj(key,wiersz)<<endl;

Plik sam się zamknie po forze.
I nie trzeba martwić się o zmienne w case
Oraz nazwę key możesz użyć w następnym forze niżej.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.