从cin读取不同类型的输入

reading different types of input from cin

本文关键字:输入 同类型 cin 读取      更新时间:2023-10-16

当处理从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中。

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

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