• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szyfr cezara problem z getline(cin,tab) w case

Object Storage Arubacloud
+1 głos
519 wizyt
pytanie zadane 12 czerwca 2016 w C i C++ przez Szejk Obywatel (1,510 p.)

Witam zajmuję się teraz projektem z szyfrem cezara i vinegre niestety mam problem ze zdaniami w cezarze  82 linia kodu cin>> tab;.  wydaje mi się ze pownno tam być getline(cin,tab)  i problem się rozwiąże ale gdy wpisuje to w menu czyli w case to nie działa co ciekawe działa gdy getline(cin,tab) bedzie po za menu czyli poza case.  W czym może być problem?   

Pozdrawiam.


#include<iostream>
#include<cstdlib>
#include<string>

using namespace std;

inline int sprawdz(char znak)
{
  //jesli jest mala litera
  if(znak >= 'a' && znak <= 'z') return 0;
  //jesli jest duza litera
  if(znak >= 'A' && znak <= 'Z') return 1;
  //inna niż litera
  return 2;
}

void szyfruj(int klucz, string &tab)
{
  //sprawdzenie, czy klucz miesci sie w zakresie
  if(!(klucz >= -26 && klucz <= 26))
    {cout<<("podales zly klucz\n");
    return;}

  int pom;
  char a, z;

  for(int i = 0; i < tab.size(); i++)
  {
    pom = sprawdz(tab[i]);
    //ustalienie wielkosci litery
    if(pom < 2)
    {
      if(pom == 0)
        a = 'a', z = 'z';
      else
        a = 'A', z = 'Z';

      if(klucz >= 0)

        if(tab[i] + klucz <= z)
          tab[i] += klucz;
        else
          tab[i] = tab[i] + klucz - 26;
      else
        if(tab[i] + klucz >= a)
          tab[i] += klucz;
        else
          tab[i] = tab[i] + klucz + 26;
    }
  }
}


int main()
{

int klucz, hlp1, hlp2, wybor;
 string tab;

  cout<<"1.Szyr Cezara \n";
  cout<<"2.Szyr Vigenere'a \n";

cin >>wybor;
switch(wybor){
    case 1:{

   cout<<"1.Szyfruj \n";
    cout<<"2.rozszyfruj \n";



  cin>>wybor;
  switch(wybor){



  case 1:{


  cout<<"Podaj zdanie do zaszyfrowania: ";
cin>> tab;


cout<<"Podaj klucz z przedziału [-26..26]: ";
  cin>>klucz;
  szyfruj(klucz,tab); //szyfrowanie

  cout<<"Po zaszyfrowaniu: "<<tab<<endl;

  szyfruj(-klucz,tab); //deszyfrowanie

  cout<<"Po rozszyfrowaniu: "<<tab<<endl;
  break;
    }

    case 2:{
        cout<<"Podaj zdanie do rozszyfrowania \n "<<endl;
        cin>> tab;
          cout<<"Podaj klucz do rozszyfrowania. PAMIETAJ BY DAC LICZBE UJEMNA \n "<<endl;
        cin>>klucz;
    szyfruj(klucz,tab);
    cout<<"Po rozszyfrowaniu: "<<tab<<endl;

                break;}

    default :{
        cout<<"Zly wybor ";
        break;}
    }


 case 2:{   // szyfr vinegre
break;
}

}



    default :{
        cout<<"Zly wybor ";
        break;}

break;
    }



  system("pause");
  return 0;
}

 

komentarz 12 czerwca 2016 przez Szahid Pasjonat (20,930 p.)
Nie napisałeś najważniejszego. Jaki błąd Ci wywala albo co idzie nie po myśli. Napisałeś tylko że jest jakiś problem

1 odpowiedź

0 głosów
odpowiedź 12 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)
Switch w c++ działa tylko dla dla zmiennych typu podstawowego i jednocześnie całkowitego.. czyli tylko dla liczb całkowitych.. nie możesz go użyć porównując tekst, zamień switch'a na if'y i wszystko powinno już działać.
komentarz 12 czerwca 2016 przez MetRiko Nałogowiec (37,110 p.)

PS Jeżeli jednak bardzo ci zależy na używaniu tekstu w switch'u to jest to możliwe, jednak nie bezpośrednio.. jeżeli chcesz wiedzieć więcej na ten temat polecam wpisać w google frazę hashing. : )

Podobne pytania

0 głosów
0 odpowiedzi 380 wizyt
0 głosów
1 odpowiedź 755 wizyt
0 głosów
1 odpowiedź 1,434 wizyt
pytanie zadane 5 maja 2016 w C i C++ przez Linker Bywalec (2,690 p.)

92,555 zapytań

141,402 odpowiedzi

319,544 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...