przejście do nowej linii przed getline

0

Hej. Napisałem program "Szyfr Cezara", ale jedna rzecz mi nie działa. Otóż, najpierw piszę np. "szyfruj", potem podaję liczbę dla szyfrowania (o ile mam przesunąć alfabet), a potem gdy kliknę enter to program mi się wywala, muszę od razu po podaniu liczby podać łańcuch znaków. Czyli

szyfruj
1//tu daję enter program się wywala
szyfruj
1To jest tekst do zaszyfrowania//program działa

Innymi słowy chcę tekst do zaszyfrowania wpisać po enter po podaniu liczby dla szyfrowania i nie wiem czemu mi to nie działa.
Kod programu:

#include <iostream>
#include <string>

using namespace std;

void szyfruj(int n){	
	string zdanie;
	getline(cin, zdanie);
	int dl=zdanie.length();
	for (int i=0; i<dl; i++) {
		if (zdanie[i] < 123 && zdanie[i] > 96) {
			if (zdanie[i]+n > 122) cout << char(zdanie[i]+n-26);
			else cout << char(zdanie[i]+n);
		}
		else if (zdanie[i] < 91 && zdanie[i] > 64) {
			if (zdanie[i]+n > 90) cout << char(zdanie[i]+n-26);
			else cout << char(zdanie[i]+n);
		}			
		else cout << zdanie[i];
	}
}

void odszyfruj(int n){
	string zdanie;
	getline(cin, zdanie);
	int dl=zdanie.length();
	for (int i=0; i<dl; i++) {
		if (zdanie[i] < 123 && zdanie[i] > 96) {
			if (zdanie[i]-n < 97) cout << char(zdanie[i]-n+26);
			else cout << char(zdanie[i]-n);
		}
		else if (zdanie[i] < 91 && zdanie[i] > 64) {
			if (zdanie[i]-n < 65) cout << char(zdanie[i]-n+26);
			else cout << char(zdanie[i]-n);
		}			
		else cout << zdanie[i];
	}			
}


int main(){
	
	string haslo;
	int n;
	cin >> haslo;
	
	if (haslo == "szyfruj") {
		cin >> n;
		szyfruj(n);
		
	}
	else if (haslo == "odszyfruj"){
		cin >> n;
		odszyfruj(n);
	}
    return 0;
}
0
if (haslo == "szyfruj") {
    cin >> n;
    cin.sync();
    szyfruj(n);
}
0

Hm, no też mi nie działa... Wyrzuca z programu.

0

mnie nie wyrzuca.

0

Mnie wyrzuca i w systemie sprawdzania zadań mam 0 punktów, więc ich też chyba wyrzuca ;)

cin.get(); 

za to mnie nie wyrzuca.

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