Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Problem z wstawieniem instrukcji warunkowej w szyfrowaniu cezara

Ostatnio zmodyfikowano 2013-06-11 13:18
Autor Wiadomość
baca1616
Temat założony przez niniejszego użytkownika
[C] Problem z wstawieniem instrukcji warunkowej w szyfrowaniu cezara
» 2013-06-10 21:41:46
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 :

C/C++
#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 narazie na to nie trzeba zwracac uwagi tylko na to dlaczego nie można dac if/switch


Czekam na jakies wskazówkii
P-85330
Mitu
» 2013-06-11 13:18:00
Nie chodzi o dodanie instrukcji warunkowych, a o pojawienie się gets po scanf.

Scanf usuwa białe znaki z początku i wczytuje wszystko dopóki nie trafi na kolejny biały znak.
Gets wczytuje to co jest w buforze, czyli w tym przypadku "\n" i kończy robotę, bo już nic tam nie zostało.
Dlatego musisz wyczyścić bufor, np. wczytując resztki po scanf za pomocą gets, żeby można było wprowadzić tekst.

C/C++
#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 );
    gets( tab ); // ############ <- o, tutaj!
    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;
   
}

P-85374
« 1 »
  Strona 1 z 1