2012-06-10 53 views
0

为什么这件事会一直循环? ..我试图清除cin流,但仍然循环,如果我输入的东西以外的数字。Cin递归函数

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()和询问循环内部输入的消息。递归杀死RAM! –

+0

@FlielixGalindoAllué不应该进行尾端优化处理吗?或者当你说它杀死RAM时,具体是什么意思? – s3rius