2017-10-11 159 views
1

当处理从cin读取不同类型的输入时,我原本以为开始阅读就好像输入是整数。如果失败,请将其作为字符串读取。读取来自cin的不同类型的输入

它工作正常,直到我试图读取诸如“+”,“ - ”等运算符。进入if(!fail)后,它会要求输入另一个输入(如“+”,“ - ”等操作符)。这期间,输入甚至不应该被读取

这里是代码:

void RPNCalc::run() 
{ 
    int numInput; bool boolInput = false; string stringInput; char charInput; 
    while (stringInput != "quit") 
    { 
     cin >> numInput; 
     if (!cin) 
     { 
      cout << "not an int" << endl; 
      cin.clear(); 
      cin >> stringInput; 
      cout << stringInput << endl; 
      readNonNumInput(stringInput, boolInput); 
     } 
     else 
     { 
      Datum temp = Datum(numInput); 
      calculator.push(temp); 
     } 
    } 
} 

当读取运营商为CIN,它无法读取它作为一个整数后,它在某种程度上失去了运营商在缓冲。例如,如果我输入“+”,它将无法被读取为整数,因此它将打印语句“not an int”。但是,由于“+”以某种方式在缓冲区中丢失,因此没有任何内容可读入到stringInput中。而对于其他字符串输入,它不能被读作整数,并且该字符串仍然存在于缓冲区中,随后可以读入到stringInput中。

这是我对这里发生的事情的理解。但我可能是错的。

回答

1

总是读一个字符串,然后尝试转换。当您尝试读取数字时,“+/-”被消耗,因为它们可能是数字的字符串表示的一部分

相关问题