Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не работает getline в case

42K
03 марта 2011 года
coirius
73 / / 21.07.2010
Здраствуйте, у меня проблема с оператором getline в case - он попросту пропускается когда надо вводить текст ... уже второй день над етим бьюсь и ничего сделать немогу ...

Код:
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);
            }
    }


Может вы подскажите с чем проблема?
11
03 марта 2011 года
oxotnik333
2.9K / / 03.08.2007
А под отладчиком как работает? Брейкпоинт если поставить на него?
42K
03 марта 2011 года
coirius
73 / / 21.07.2010
Тоже пропускает, std::cin работает нормально но он считывает текст только до пробела ..
11
03 марта 2011 года
oxotnik333
2.9K / / 03.08.2007
переменная opt тоже через std::cin считывается?
42K
03 марта 2011 года
coirius
73 / / 21.07.2010
да, через std::cin
11
03 марта 2011 года
oxotnik333
2.9K / / 03.08.2007
после
 
Код:
cin>>opt;

поставь
 
Код:
cin.get();
42K
03 марта 2011 года
coirius
73 / / 21.07.2010
Не помогло.
Вот код всей функции:
Код:
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);
            }
    }
}
11
03 марта 2011 года
oxotnik333
2.9K / / 03.08.2007
а где собственно cin.get() ?
42K
03 марта 2011 года
coirius
73 / / 21.07.2010
был, я просто его удалил, т.к. он не помог решить проблему ...
11
03 марта 2011 года
oxotnik333
2.9K / / 03.08.2007
Цитата: coirius
был, я просто его удалил,

был в каком месте?

Цитата: coirius
т.к. он не помог решить проблему ...

а у меня работает

42K
03 марта 2011 года
coirius
73 / / 21.07.2010
Код:
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);
            }
    }
}

11
03 марта 2011 года
oxotnik333
2.9K / / 03.08.2007
хорошо, перефразирую: поставь std::cin.get(); перед getline(cin, text);
42K
04 марта 2011 года
coirius
73 / / 21.07.2010
Ура заработало :)
Спасибо огромное ...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог