switch(opt) {
case 1:
{
std::string text;
std::getline(std::cin, text);
for(int i = 0; (unsigned int)i < text.size(); i++) {
if((char)text != ' ') {
std::cout << RSAEncrypt((int)text, n, e);
} else {
std::cout << ' ';
}
}
std::cout << "\n";
}
break;
case 2:
{
std::ifstream inputfile;
inputfile.open("forencode.txt");
if(inputfile.is_open()) {
std::string text;
std::getline(inputfile, text);
inputfile.close();
std::ofstream outputfile;
outputfile.open("encoded.txt");
if(outputfile.is_open()) {
for(unsigned long int i = 0; (unsigned int)i < text.size(); i++) {
outputfile << RSAEncrypt((int)text, n, d);
}
outputfile.close();
} else {
exit(EXIT_FAILURE);
}
} else {
exit(EXIT_FAILURE);
}
}
break;
default:
{
std::cout << "Unknown option. Exit with error.";
exit(EXIT_FAILURE);
}
}
Не работает getline в case
Здраствуйте, у меня проблема с оператором getline в case - он попросту пропускается когда надо вводить текст ... уже второй день над етим бьюсь и ничего сделать немогу ...
А под отладчиком как работает? Брейкпоинт если поставить на него?
Тоже пропускает, std::cin работает нормально но он считывает текст только до пробела ..
переменная opt тоже через std::cin считывается?
да, через std::cin
Код:
cin>>opt;
поставь
Код:
cin.get();
Вот код всей функции:
Код:
void encode() {
cout << "Please choose option:\n1. Encode string\n2. Encode text file\n";
unsigned short int opt = 0;
cin >> opt;
int p = 101, q = 103;
cout << "Enter a p (must be a prime number): ";
cin >> p;
cout << "Enter a q (must be a prime number): ";
cin >> q;
int *keys = 0;
keys = RSAKeyGeneration(p, q);
int n = keys[0];
int e = keys[1];
int d = keys[2];
cout << keys[0] << " " << keys[1] << " " << keys[2] << "\n";
switch(opt) {
case 1:
{
string text;
getline(cin, text);
for(int i = 0; (unsigned int)i < text.size(); i++) {
if((char)text != ' ') {
cout << RSAEncrypt((int)text, n, e);
} else {
cout << ' ';
}
}
cout << "\n";
}
break;
case 2:
{
ifstream inputfile;
inputfile.open("forencode.txt");
if(inputfile.is_open()) {
string text;
getline(inputfile, text);
inputfile.close();
ofstream outputfile;
outputfile.open("encoded.txt");
if(outputfile.is_open()) {
for(unsigned long int i = 0; (unsigned int)i < text.size(); i++) {
outputfile << RSAEncrypt((int)text, n, d);
}
outputfile.close();
} else {
exit(EXIT_FAILURE);
}
} else {
exit(EXIT_FAILURE);
}
}
break;
default:
{
cout << "Unknown option. Exit with error.";
exit(EXIT_FAILURE);
}
}
}
cout << "Please choose option:\n1. Encode string\n2. Encode text file\n";
unsigned short int opt = 0;
cin >> opt;
int p = 101, q = 103;
cout << "Enter a p (must be a prime number): ";
cin >> p;
cout << "Enter a q (must be a prime number): ";
cin >> q;
int *keys = 0;
keys = RSAKeyGeneration(p, q);
int n = keys[0];
int e = keys[1];
int d = keys[2];
cout << keys[0] << " " << keys[1] << " " << keys[2] << "\n";
switch(opt) {
case 1:
{
string text;
getline(cin, text);
for(int i = 0; (unsigned int)i < text.size(); i++) {
if((char)text != ' ') {
cout << RSAEncrypt((int)text, n, e);
} else {
cout << ' ';
}
}
cout << "\n";
}
break;
case 2:
{
ifstream inputfile;
inputfile.open("forencode.txt");
if(inputfile.is_open()) {
string text;
getline(inputfile, text);
inputfile.close();
ofstream outputfile;
outputfile.open("encoded.txt");
if(outputfile.is_open()) {
for(unsigned long int i = 0; (unsigned int)i < text.size(); i++) {
outputfile << RSAEncrypt((int)text, n, d);
}
outputfile.close();
} else {
exit(EXIT_FAILURE);
}
} else {
exit(EXIT_FAILURE);
}
}
break;
default:
{
cout << "Unknown option. Exit with error.";
exit(EXIT_FAILURE);
}
}
}
а где собственно cin.get() ?
был, я просто его удалил, т.к. он не помог решить проблему ...
Код:
void encode() {
cout << "Please choose option:\n1. Encode string\n2. Encode text file\n";
unsigned short int opt = 0;
cin >> opt;
cin.get();
int p = 101, q = 103;
cout << "Enter a p (must be a prime number): ";
cin >> p;
cout << "Enter a q (must be a prime number): ";
cin >> q;
int *keys = 0;
keys = RSAKeyGeneration(p, q);
int n = keys[0];
int e = keys[1];
int d = keys[2];
cout << keys[0] << " " << keys[1] << " " << keys[2] << "\n";
switch(opt) {
case 1:
{
string text;
getline(cin, text);
for(int i = 0; (unsigned int)i < text.size(); i++) {
if((char)text != ' ') {
cout << RSAEncrypt((int)text, n, e);
} else {
cout << ' ';
}
}
cout << "\n";
}
break;
case 2:
{
ifstream inputfile;
inputfile.open("forencode.txt");
if(inputfile.is_open()) {
string text;
getline(inputfile, text);
inputfile.close();
ofstream outputfile;
outputfile.open("encoded.txt");
if(outputfile.is_open()) {
for(unsigned long int i = 0; (unsigned int)i < text.size(); i++) {
outputfile << RSAEncrypt((int)text, n, d);
}
outputfile.close();
} else {
exit(EXIT_FAILURE);
}
} else {
exit(EXIT_FAILURE);
}
}
break;
default:
{
cout << "Unknown option. Exit with error.";
exit(EXIT_FAILURE);
}
}
}
cout << "Please choose option:\n1. Encode string\n2. Encode text file\n";
unsigned short int opt = 0;
cin >> opt;
cin.get();
int p = 101, q = 103;
cout << "Enter a p (must be a prime number): ";
cin >> p;
cout << "Enter a q (must be a prime number): ";
cin >> q;
int *keys = 0;
keys = RSAKeyGeneration(p, q);
int n = keys[0];
int e = keys[1];
int d = keys[2];
cout << keys[0] << " " << keys[1] << " " << keys[2] << "\n";
switch(opt) {
case 1:
{
string text;
getline(cin, text);
for(int i = 0; (unsigned int)i < text.size(); i++) {
if((char)text != ' ') {
cout << RSAEncrypt((int)text, n, e);
} else {
cout << ' ';
}
}
cout << "\n";
}
break;
case 2:
{
ifstream inputfile;
inputfile.open("forencode.txt");
if(inputfile.is_open()) {
string text;
getline(inputfile, text);
inputfile.close();
ofstream outputfile;
outputfile.open("encoded.txt");
if(outputfile.is_open()) {
for(unsigned long int i = 0; (unsigned int)i < text.size(); i++) {
outputfile << RSAEncrypt((int)text, n, d);
}
outputfile.close();
} else {
exit(EXIT_FAILURE);
}
} else {
exit(EXIT_FAILURE);
}
}
break;
default:
{
cout << "Unknown option. Exit with error.";
exit(EXIT_FAILURE);
}
}
}
хорошо, перефразирую: поставь std::cin.get(); перед getline(cin, text);
Спасибо огромное ...