Szyfr cezara – podczas wyświetlania zaszyfrowanego wyrazu pojawia się niechciany znak

0

Witam, podczas wyświetlania zaszyfrowanego wyrazu pojawia się przed nim niepożądany przeze mnie znak (raz jest to @, raz Ę). Nie wiem, czym jest to spowodowane. Może wy coś dostrzeżecie ;)

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main() {
    size_t rozm;
    int i;
    char *tab, *tab2;

    printf("Podaj dlugosc lancucha: \n");
    while(scanf("%d", &rozm) != 1)
    {
        printf("Wprowadz liczbe!\n");
        while
                ((rozm = getchar()) != '\n' && rozm != EOF);
    }
    tab = malloc(rozm * sizeof(char));
    tab2 = malloc(rozm * sizeof(char));

    printf("Wprowadz ciag znakow: \n");
    for (i = 0; i <= rozm; i++) {
        scanf("%c", &tab[i]);
    }

    for ( i = 0; i <= rozm; i++)
    {
        if(tab[i] >= '0' && tab[i] <= '9')
        {
            if(tab[i] + 3 <= '9')
                tab2[i] = tab[i] + 3;
            else
                tab2[i] = tab[i] - 7;
        }
        else if(tab[i] >= 'a' && tab[i] <= 'z')
        {
            if (tab[i] + 3 <= 'z')
                tab2[i] = tab[i] + 3;
            else
                tab2[i] = tab[i] - 23;
        }
        else if(tab[i] >= 'A' && tab[i] <= 'Z')
        {
            if (tab[i] + 3 <= 'Z')
                tab2[i] = tab[i] + 3;
            else
                tab2[i] = tab[i] - 23;
        }
    }
    printf("Dlugosc lancucha: %d\n", rozm);
    printf("Niezakodowany ciag:");
    for(i=0; i<=rozm; i++)
    {
        printf("%c", tab[i]);
    }
    printf("\nZakodowany ciag:");
    for(i=0; i<=rozm; i++)
    {
        printf("%c", tab2[i]);
    }
    free(tab);
    free(tab2);

    return 0;
}
0

Na pewno przed?

    tab = malloc(rozm * sizeof(char));
    for (i = 0; i <= rozm; i++) {

Pobierasz za dużo znaków, a do tego nie kończysz wczytanego stringa znakiem zero.

Wczytaj po prostu %s zamiast znak po znaku.

Ponadto, używaj odpowiednich formatów dla typów:

    size_t rozm;
    while(scanf("%d", &rozm) != 1)

%d nie jest odpowiednie dla size_t, użyj po prostu int.

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