cin.get () не блокирует - PullRequest
       20

cin.get () не блокирует

1 голос
/ 16 ноября 2011

У меня та же проблема, что и в связанном вопросе. Окно консоли (в VS 2010) исчезает сразу после запуска программы. Я использую cin.get (); в конце основной функции, но проблема все еще остается. Есть идеи о возможной причине? Вы можете проверить код в основном:

int main()
{
    const int arraysize = 10;
    int order;
    int counter;
    int a[arraysize] = {2,6,4,45,32,12,7,33,23,98};

    cout<<"Enter 1 to sort in ascending order\n"
        <<"Enter 2 to sort in descending order\n";
    cin>>order;
    cout<<"Data items in original order\n";

    for(counter=0;counter<arraysize;counter++){
        cout<<setw(4)<<a[counter];
    }

    switch (order){
        case 1: cout<<"\nData items in ascending order\n";
                selectionSort(a, arraysize, ascending);
                break;
        case 2: cout<<"\nData items in descending order\n";
                selectionSort(a, arraysize, descending);
                break;
        default: return 0;
    }

    for(counter=0;counter<arraysize;counter++){
        cout<<setw(4)<<a[counter];
    }

    cout<<endl;
    cin.get();

    return 0;
}

ссылка: C ++ в Windows - окно консоли просто мигает и исчезает. Что происходит?

Ответы [ 4 ]

3 голосов
/ 16 ноября 2011

Таким образом, при использовании cin.get () после cin, вы всегда должны помнить о том, чтобы добавить cin.ignore () между ними.

cin>>order;
cin.ignore();
/* 
   other codes here
 */
cin.get();

Это происходит главным образом потому, что CIN будет игнорировать пробелы в буфере, поэтому после порядка cin >> в буфере появляется «новая строка» (\ n), тогда ваш cin.get просто читает это \ n, затем Вы успешно выполнили программу и вернулись. Cin.ignore () будет игнорировать предыдущий ввод в буфере. Это действительно поможет!

Я студент в Китае. Ваш вопрос - первый, на который я могу ответить здесь. Однажды у меня были такие же проблемы, как и у вас. Я надеюсь, это поможет вам. Не обращай внимания на мой плохой английский и спасибо.

2 голосов
/ 16 ноября 2011

Я думаю, что

default: return 0;

исполняется.

EDIT:

Вы правы, это не проблема. Прочитайте это .

Быстрое исправление:

cout<<endl;
cin.ignore(); // <---- ignore previous input in the buffer
cin.get();

Но вы можете прочитать статью для получения дополнительной информации о поведении.

0 голосов
/ 16 ноября 2011

Возможно, ваш cin.get () читает символ новой строки, который завершил ввод вашего заказа? Вы можете попробовать вызвать cin.get () дважды.

0 голосов
/ 16 ноября 2011

Бьюсь об заклад, вы нажали метку переключателя по умолчанию (return 0;). Это обходит cin.get() - вам нужно один cin.get() для оператора возврата.

...