Jak poprawnie opróżnić bufor cin, aby móc wpisywać teksty do vectora string, aby nie zapętlił się przy getline i również nie zapełniał się przy znaku końca linii jak i spacji ?
Próbowałem też z cin.ignore() + fflush(stdin) ale tylko pobierał mi jeden tekst, a następny już omijał.
Albo może macie jakąś inną propozycję, czym można to zastąpić? :)
Mój kodzik, szyfr cezara, zmieniający tylko duże litery:
#include <iostream>
#include <vector>
#include <climits> // INT_MAX
using namespace std;
char cezar(char znak, int ile) {
if( (int)znak >= 65 && (int)znak <= 90 - ile) znak = (char)( (int)znak + ile);
if( (int)znak >= 91 - ile && (int)znak <= 90) znak = (char)( (int)znak - 26 + ile);
return znak;
}
int main() {
cout << "ilosc testow: ";
int nIloscTestow;
cin >> nIloscTestow;
vector<string> tekstyDoZamiany;
vector<string> wyniki;
string tmp;
string tekst;
for(int i = 0; i < nIloscTestow; ++i) {
cin.ignore(INT_MAX); // jak tutaj poprawnie oproznic bufor cin ?
std::getline(std::cin, tekst); // tu sie zapetla, jak jest cin.ignore(INT_MAX) powyzej
tekstyDoZamiany.push_back(tekst);
}
for(int i = 0; i < nIloscTestow; ++i) {
tmp = tekstyDoZamiany[i];
for(int j = 0; j < tmp.length(); ++j) {
tmp[j] = cezar(tmp.at(j), 3);
}
wyniki.push_back(tmp);
}
vector<string>::iterator it = wyniki.begin();
for(it; it != wyniki.end(); ++it) {
cout << *it << endl;
}
return 0;
}