- Wiesz o coś o void? Twoje funkcje zwracają string, ale nigdzie nie są one przechowywane.
- We funkcji "szyfr" przekazujesz argument, który jest używany tylko w tej funkcji. Może lepiej usunąć ten argument i zamiast tego mieć zmienną lokalnie we funkcji?
- Linia nr.8, sin to funkcja. Nie masz zaincludowanego "cmath", ale warto zmienić na przyszłość
Problemem o którym piszesz w pytaniu jest cin zostawiający '\n'.
https://forum.pasja-informatyki.pl/5572/getline-i-cin-ignore
Przy wyborze opcji używasz cin, który zostawia '\n'. Później używasz getline, który kończy swoją pracę automatycznie gdyż oczekuje na '\n'.
PS
Starałem naprawić funkcje 'deszyfr', niestety bez skutku może ty lub ktoś inny da radę?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void wypiszMozliwosci();
void szyfr();
void deszyfr();
bool endProgram = false;
int tryb;
int main() {
while(!endProgram) {
wypiszMozliwosci();
cout << "=> ";
cin >> tryb;
switch(tryb) {
case 1:
cout << "Wybrano deszyfrowanie" << endl;
deszyfr();
break;
case 2:
cout << "Wybrano szyfrowanie" << endl;
szyfr();
break;
case 3:
endProgram = true;
break;
default:
cout << "Zla opja" << endl;
break;
}
}
return 0;
}
void wypiszMozliwosci() {
cout << "Co chcesz zrobic: " << endl;
cout << "1.Rozszyfrowac tekst" << endl;
cout << "2.Zaszyfrowac tekst" << endl;
cout << "3.Aby wyjsc z programu" << endl;
}
void szyfr() {
string szyfrIn;
cin.ignore(); // Trzeba oczyścić bufor z '\n' !
getline(cin, szyfrIn);
for(int z = 0; z < szyfrIn.length(); z++) {
cout << (int) (szyfrIn[z]) << " ";
}
cout << endl;
}
void deszyfr() {
string str;
vector<int> tab;
cout << "Aby zakonczyc wprowadzanie wpisz dowolna litere: " << endl;
int temp;
while(cin >> temp) {
tab.push_back(temp);
}
for(int i = 0; i <tab.size(); i++) {
str += (char) (tab[i]);
}
cout << str << endl;
}