从 cin 读取不同类型的输入
reading different types of input from 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。
这是我对这里发生的事情的理解。但我可能是错的。
始终读取一个字符串,然后尝试转换。当您尝试读取数字时,“+/-”会被消耗掉,因为它们可以是数字的字符串表示的一部分
在处理从 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。
这是我对这里发生的事情的理解。但我可能是错的。
始终读取一个字符串,然后尝试转换。当您尝试读取数字时,“+/-”会被消耗掉,因为它们可以是数字的字符串表示的一部分