2012-06-10 1 views
0

Почему эта штука держится? .. Я попробовал очистить поток cin, но все же он петли, если я вхожу в нечто иное, чем число.Cin in recursive function

void AskQuestion() 
{ 
    DisplayQuestion(); 
    bool Exit = false; 
    int input = 0; 
    cout<<"Input : "; 
    if(!(cin>>input)) 
    { 
     cout<<"Invalid Input"<<endl; 
     cin.ignore(10000,'\n'); 
     cin.clear(); 
    } 
    else 
    { 
     Exit = ProcessInput(input); 
    } 
    if(!Exit) AskQuestion(); 
} 
+0

Хорошо это работает, когда я ставлю перед тем ясно игнорировать, но может кто-нибудь сказать мне, почему? –

ответ

2

Прежде всего, не следует использовать рекурсию: сделать его while.

Во-вторых, использование синхронизации:

int number; 
while (true) { 
    if (cin >> number) 
     break; 
    cout << "Invalid number.\n"; 
    cin.sync(); 
    cin.clear(); 
} 
cout << "Number: " << number; 
+0

Я хочу отобразить недопустимый ввод, а затем снова вызвать функцию, если cin терпит неудачу. как я могу достичь этого, используя? –

+0

Положите свой вызов на DisplayQuestion() и сообщение, запрашивающее ввод внутри цикла. Рекурсия убивает ОЗУ! –

+0

@ FèlixGalindoAllué не должен оптимизировать хвостовую опцию, чтобы позаботиться об этом? Или что конкретно вы имеете в виду, когда говорите, что он убивает ОЗУ? – s3rius

 Смежные вопросы

  • Нет связанных вопросов^_^