Problem z wstawieniem instrukcji warunkowej w algorytmie cezara

0

witam mam zrobic program na zaliczenie mianowicie szyfrowanie cezara z zapisywaniem wyniku do pliku i pozniej mozliwoscia go otworzenia. Nie moge ruszyć z miejsca algorytm sam w sobie dziala zamienia wg algorytmu i zapisuje ale problem pojawil sie gdy chcialem zrobic zeby na poczatku byla mozliwosc wyboru:

  1. zaszyfrowanie i zapis
  2. odczyt z pliku i odszyfrowanie

wstawilem instrukcje warunkowa i... nic program traci swoje działanie. Pisze program w CodeBlocks

tu daje kod :

#include <stdio.h>
#define MAX 100

int main ()
{


int i,menu;
char tab[MAX];
    printf("Chcesz zaszyfrowac tekst i zapisac do pliku?, wybierz 1\n");
    printf("Chcesz odszyfrowac tekst z pliku, wybierz 2\n");
    printf("chcesz zakonczyc prace programu wybierz 3");
    scanf("%d",&menu);
    if(menu==1)
    {
        printf("Podaj tekst do zaszyfrowania\n");
        gets(tab);
        for (i=0;i<MAX;i++)
        {
            if ((tab[i]>='A')&&(tab[i]<='Z'))
                tab[i]=(65+(tab[i]-62)%26);
                else
                 if (tab[i]>='a' && tab[i]<='z')
                     tab[i]=(97+(tab[i]-94)%26);
        }
        printf("zaszyfrowany tekst, ktory zostal zapisany  to: %s\n",tab);
        char nazwap[]="cezar.txt";
        FILE *fp;
        // otwarcie pliku do zapisu
        fp=fopen(nazwap, "wt");
        if(fp==NULL)
        {
            printf("Blad przy tworzeniu pliku !\n");
            return 1;
        }

        if(fputs(tab, fp) == EOF)
        {
            printf("Wystapil blad przy zapisie do pliku %s !\n", nazwap);
            fclose(fp);
            return 1;
        }
        fclose(fp);
    }
/*for(i=0;i<MAX;i++)
{
    if ((tab[i]>='A')&&(tab[i]<='Z'))
        tab[i]=65+(tab[i]-42)%26;
        else
            if (tab[i]>='a' && tab[i]<='z')
                tab[i]=(97+(tab[i]-74)%26);
}
printf("\n po odszyfrowaniu otrzymujemy: %s :",tab);*/
return 0;

}

 

w komentarzu algorytm odszyfowywania ale na razie na to nie trzeba zwracac uwagi tylko na to dlaczego nie można dac if/switch

Czekam na jakies wskazówkii

1
scanf("%d ", &menu);
0

oo taki prosty błąd dzięki ;)

a powiesz mi czemu teraz po tym jak mam menu==1 nie wyswietla tekstu "Prosze podac tekst..." tylko wczesniej wpisuje sie wlasnie tekst do zaszyfrowania a potem dopiero na koncu programu wyswietla wlasnie ten tekst?

0
 #include <stdio.h>
#include<stdlib.h>
#define MAX 100

int main ()
{


int i,menu;
char tab[MAX];
    printf("Chcesz zaszyfrowac tekst i zapisac do pliku?, wybierz 1\n");
    printf("Chcesz odszyfrowac tekst z pliku, wybierz 2\n");
    printf("chcesz zakonczyc prace programu wybierz 3");
    printf("Wybieram: ");
    scanf("%d ", &menu);

    switch(menu)
    {
    case 1:
    {
        printf("Podaj tekst do zaszyfrowania: ");fflush(stdout);
        gets(tab);
        for (i=0;i<MAX;i++)
        {
            if ((tab[i]>='A')&&(tab[i]<='Z'))
                tab[i]=(65+(tab[i]-62)%26);
                else
                 if (tab[i]>='a' && tab[i]<='z')
                     tab[i]=(97+(tab[i]-94)%26);
        }
        printf("zaszyfrowany tekst, ktory zostal zapisany  to: %s\n",tab);
        char nazwap[]="cezar.txt";
        FILE *fp;
        // otwarcie pliku do zapisu
        fp=fopen(nazwap, "wt");
        if(fp==NULL)
        {
            printf("Blad przy tworzeniu pliku !\n");
            return 1;
        }

        if(fputs(tab, fp) == EOF)
        {
            printf("Wystapil blad przy zapisie do pliku %s !\n", nazwap);
            fclose(fp);
            return 1;
        }
        fclose(fp);
    }
}
/*for(i=0;i<MAX;i++)
{
    if ((tab[i]>='A')&&(tab[i]<='Z'))
        tab[i]=65+(tab[i]-42)%26;
        else
            if (tab[i]>='a' && tab[i]<='z')
                tab[i]=(97+(tab[i]-74)%26);
}
printf("\n po odszyfrowaniu otrzymujemy: %s :",tab);*/
return 0;

}
0

zamien:

scanf("%d ", &menu)

na:

scanf("%d", &menu);
char c;
while((c=getchar())!='\n'&&c!=EOF);

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