cin.get() не блокирует
У меня та же проблема, что и в связанном вопросе. Окно консоли (в 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 ответа
Я думаю, что
default: return 0;
быть казненным.
РЕДАКТИРОВАТЬ:
Вы правы, это не проблема. Прочитайте это.
Быстрое решение:
cout<<endl;
cin.ignore(); // <---- ignore previous input in the buffer
cin.get();
Но вы можете прочитать статью для получения дополнительной информации о поведении.
Поэтому, когда вы используете cin.get() после cin, вы всегда должны добавлять cin.ignore() между ними.
cin>>order;
cin.ignore();
/*
other codes here
*/
cin.get();
Это происходит главным образом потому, что CIN будет игнорировать пробелы в буфере, поэтому после порядка cin>> в буфере появляется "новая строка"(\n), затем ваш cin.get просто читает это \n, затем вы успешно программируете исполнить и вернуть. Cin.ignore () будет игнорировать предыдущий ввод в буфере. Это действительно поможет!
Я студент в Китае. Ваш вопрос - первый, на который я могу ответить здесь. Однажды у меня были такие же проблемы, как и у вас. Я надеюсь, это поможет вам. Не обращайте внимания на мой плохой английский и спасибо.
Бьюсь об заклад, вы нажали метку переключателя по умолчанию (return 0;
). Это обходит cin.get()
- вам нужен один cin.get()
за отчет о возврате.
Возможно, ваш cin.get() читает символ новой строки, который завершил ввод вашего заказа? Вы можете попробовать вызвать cin.get() дважды.