3

我尝试编写一个函数,将表达式切成标记,如下所示。

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”。这完全让我感到困惑。有人对此有任何想法吗???谢谢!

4

2 回答 2

1

您声明变量的类型是:

int d_tmp;
char ch_tmp;

使用 input 3 + 4,执行如下:

  • cin >> d_tmp;读取 3,读取空间,停止
  • if(!cin)是假的,去别的地方,然后打印3
  • cin >> d_tmp;读取+,读取空间,错误
  • if(!cin)是真的
  • cin >> ch_tmp;4

输入流的数字解析器将其视为数字,因此如果看到它+12就会消耗它。+

于 2013-04-05T16:22:52.487 回答
1

cin >> d_tmp;“+”字符在尝试将其解析为int并设置失败标志时被吃掉

于 2013-04-05T16:32:17.440 回答