Problem z getline()

0

To co w tytule tematu, w miejsach gdzie dodalem komentarz program dziwnym trafem skipuje pobranie danych i wraca znowu do menu, nie mam pojęcia z jakiego powodu. Prosze o pomoc :)

#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;

int main()
{
	string tekst;
	int wybor = 0;
	int dlugosc;
	string tekstPierwotny;
	string fragment;
	int x = 0, y = 0, z = 0;
	cout << "Wpisz tekst, ktory chcesz zmodyfikowac: ";
	getline(cin, tekst);
	tekstPierwotny = tekst;
	Sleep(1000);
	system("cls");
	dlugosc = tekst.length() + 20;
		do {
			system("cls");
		for (int i = 0; i < dlugosc; i++) cout << "=";
		cout << '\n'<<"Tekst pierwotny: "<< tekstPierwotny << '\n';
		cout << "Tekst po zmianach: " << tekst << '\n';
		for (int i = 0; i < dlugosc; i++) cout << "=";
		cout << '\n';
		cout << "Co chcesz zrobic z powyzszym tekstem? \n";
		cout << "1. Usuwanie liter w tekscie \n";
		cout << "2. Wstawianie fragmentu do tekstu \n";
		cout << "3. Zastapienie fragmentu tekstu innym fragmentem \n";
		cout << "4. Wyjscie \n";
		cout << "Wybor: ";
		cin >> wybor;
		switch (wybor)
		{
		case 1:
			system("cls");
			cout << "Podaj od ktorego znaku usuwac: ";
			cin >> x;
			cout << "Podaj ile znakow usuwac: ";
			cin >> y;
			tekst.erase(x-1, y-1);
			Sleep(1000);
			break;
		case 2:
			system("cls");
			cout << "Podaj po ktorym znaku chcesz wstawic fragment tekstu: ";
			cin >> x;
			cout << "Podaj co chcialbys tam wstawic: ";
			getline(cin, fragment); //tutaj skipuje pobranie danych
			tekst.insert(x, fragment); 
			break;
		case 3:
			system("cls");
			cout << "Podaj po ktorym znaku chcesz wstawic fragment tekstu: ";
			cin >> x;
			cout << "Podaj ile znakow chcesz zastapic: ";
			cin >> y;
			cout << "Podaj co chcialbys tam wstawic: ";
			getline(cin, fragment); //tutaj tez
			tekst.replace(x, y, fragment); 
			system("cls");
			break;
		case 4:
			system("cls");
			cout << "Wychodze z programu";
			Sleep(1000);
			break;
		default:
			break;
		}
	} while ((wybor<4 && wybor>0));






		return 0;
}

2

wstaw cin.ignore() przed każdym wywołaniem getline jeśli wcześniej używałeś cin. Dzieje się to dlatego, że cin pozostawia w strumieniu znak nowej linii i Twój getline go czyta.

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