C Szyfrowanie - problem z zapisem do pliku

0

Witam. Mam problem z szyfrem Cezara. Odczytuje plik, deszyfruje go lub szyfruje bez problemu, tylko gdy przychodzi już do zapisu tablicy do pliku, nie nadpisuje pliku tylko dodaje tekst do pliku. Domyślam się że coś jest nie tak z fopen, ale nie mam pojecia jak go rozwiązac. próbowałem już wielu trybów otwarcia i nigdy nie działa tak jak powinno

#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
int main()
{
    FILE *plik = fopen("plik.txt", "r+w");
    if (plik == NULL)
    {
        printf("Nie udalo sie otworzyc pliku!");
        return 1;
    }
    int i;
    int d=3;
    char tab[MAX];
    printf("Nacisnij 1 aby zapisac szyforwac, a 2 zeby odszyforwac");
    char c = '\0';
    while (c != '1' && c != '2')
        { c = getchar();   }

    if (c == '1')
    {
     fgets(tab, MAX, plik);
        for (i=0; i<MAX; i++)
        {

            if (tab[i]>='A' && tab[i]<='Z')
            {
                tab[i] = (tab[i] - 'A' + d) % 26 + 'A';
            }
            else if (tab[i]>='a' && tab[i]<='z')
            {
                tab[i] = (tab[i] - 'a' + d) % 26 + 'a';
            }

        }
        printf("zaszyfrowany tekst to: %s\n\n",tab);
    }
    else if(c=='2')
        {

       fgets(tab, MAX, plik);
        for (i=0; i<MAX; i++)
        {

            if (tab[i]>='A' && tab[i]<='Z')
            {
                tab[i] = (tab[i] - 'Z' - 3) % 26 + 'z';
            }
            else if (tab[i]>='a' && tab[i]<='z')
            {
                tab[i] = (tab[i] - 'z' - 3) % 26 + 'z';
            }
        }
        printf("Odszyfrowany tekst to: %s\n\n",tab);
    }
    fprintf(plik,tab);
    fclose(plik);
    return 0;
}
 
0

tak tak widziałem to. aczkolwiek żadna z tych operacji nie działa tak jakbym chciał. i nie ma pojęcia co wstawić by było dobrze.// dzięki już działa ;> nie pomyślałem o tym.

0

For files open for update (those which include a "+" sign), on which both input and output operations are allowed, the stream should be flushed (fflush) or repositioned (fseek, fsetpos, rewind) between either a writing operation followed by a reading operation or a reading operation which did not reach the end-of-file followed by a writing operation.

Wystarczy czytac dokumentacje ;>

1 użytkowników online, w tym zalogowanych: 0, gości: 1