cin - 读取加/减为char

时间:2014-04-08 14:50:03

标签: c++ input cin

我的程序输入有问题。它应该输入一个数学表达式,例如( x + 3 + ax - 5)。所有物品均由白色空间隔开。

我处理这个的方式:首先我尝试用cin >> number读取整数。如果失败了,我会尝试读取一系列字符。然后我检查这是否是一个运算符(+,-,*,/,( or )) - 如果不是,那么这必须是一个变量。

我遇到的问题是加号和减号的迹象。在读取整数时,cin似乎不会在读取+或 - 时打印错误。有没有办法以我想要的方式完成这项工作? 在此先感谢,这是我的代码片段:

int number; char * signs = new char[3]; char signsBeginning[3] = "aa"; 
signs = signsBeginning;
while(#endexpression){ 
     cin >> number;
     if(!cin){
       //not a number
       cin.clear();
       cin >> signs;
       //handling the input
     }else{
       //number
     }
}

编辑:忘记添加:我不能使用字符串。

2 个答案:

答案 0 :(得分:2)

您是否可以使用std::getline()读取整个字符串,然后解析它?

std::string line;
std::getline(std::cin, line);

// Parse the read line ...

答案 1 :(得分:1)

如果数字输入失败,输入文件位置可能已增加,因此您无法返回。您可能需要建立自己的号码。

由于您不允许使用std::string,我建议您阅读一个字符,处理该字符然后阅读另一个字符。

您可以通过将字符转换为内部表示形式,将现有数字乘以10并添加新的"数字"来构建整数:

char c;
cin >> c;
if (isdigit(c))
{
  unsigned int digit = c - '0';
  number = number * 10 + digit;
}