在阅读数学运算时,cin无法正常工作

时间:2013-04-05 15:50:39

标签: c++

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

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”。这让我很困惑。任何人都对此有任何想法?谢谢!

2 个答案:

答案 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并设置失败标志时,“+”字符被吃掉