我尝试编写一个将表达式切割成标记的函数,如下所示。
while(true)
{
cin >> d_tmp;
if(!cin){
cin.clear();
cin >> ch_tmp;
cout << ch_tmp << endl;
}
else
{
cout << d_tmp << endl;
}
}
然而,该功能并没有像我预期的那样起作用。当我输入一个随机数字和字符序列时它工作正常当我输入“a 3 b”时返回'a''3'和'b',但当我输入“3 + 4”时,所有返回的都是'3 '和'4'。
我用以下代码尝试了几个测试用例。似乎如果我想让程序打印“3”+“4”,我必须输入“3 ++ 4”。这让我很困惑。任何人都对此有任何想法?谢谢!
答案 0 :(得分:1)
您声明变量的类型是:
int d_tmp;
char ch_tmp;
使用输入3 + 4
,执行如下:
cin >> d_tmp;
读取3,读取空格,停止if(!cin)
为false,转到其他位置,然后打印3
cin >> d_tmp;
读取+
,读取空格,错误if(!cin)
是真的cin >> ch_tmp;
读取4
输入流的数字解析器将+12
视为一个数字,因此如果它看到它将消耗+
。
答案 1 :(得分:1)
当cin >> d_tmp;
尝试将其解析为int
并设置失败标志时,“+”字符被吃掉