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;
}