2012-03-12 37 views
0

我对C++很陌生,并且正在编写一个简单的加法程序。到目前为止,我有这样的代码,只用数字工程参数:简单的加法代码和严重的错误处理

int main(int argc, char *argv[]) 
{ 
    if (argc==1) 
     cout << "[email protected]"; 

    if (argc==2) 
     cout << "P"; 

     //addition function 
     if (argc==3){ 

     float number1 = atof (argv[1]); 
     float number2 = atof (argv[2]); 

     cout << number1 + number2 << endl; 
     } 

    if (argc>3) 
     cout << "P"; 

    return 0; 

} 

正如你所看到的,我指定的参数变量赋值并加入他们。这些argvs将被测试,他们必须能够处理所有事情。所以我有几个问题:

如果其中一个变量不是一个有效的数字(如1或3000),我如何让我的程序拿起这个,并采取行动?为了有效,一个数字也不能是一个等式(如分数或其他)。

- 如果输入一个奇怪的有效数字(如3,000.2(注意逗号)),将其更改为3,我该如何更改?

所以是的,抛出一些集成的错误检查/处理技术在我身上,我会永远爱你。

+0

为什么1个或3000不是有效的数字? – 2012-03-12 04:15:22

+0

大多数将字符串解析为整数或浮点数的例程在读取的第一个非数字处停止。这就是为什么'3,000.2'转换为'3'的原因。而且,命令和点在不同的语言环境中具有不同的含义,例如,对于一些“3000”是三千,而对于其他人则是三点零。 – 2012-03-12 07:41:51

回答

0

atof不足以检测字符串是否代表有效数字(例如,对于“0.25lalala”,它将返回0.25)。

完全C++解决方案:首先 :包括一个附加头:

#include <sstream> 
#include <iostream> 
using namespace std; 

然后在您的main功能:

//addition function 
    if(argc==3) 
    { 
      float number1 = 0.0; 
      float number2 = 0.0; 
      istringstream istr(argv[1]); 
      istr >> number1; 
      if(istr.rdstate() != ios::eofbit) 
      {/* argv[1] is not a valid float number */ 
      /* it works even if undeflow or overflow occures */ 
      } 
      istr.clear(); 
      istr.str(argv[2]); 
      istr >> number2; 
      if(istr.rdstate() != ios::eofbit) 
      {/* argv[2] is not a valid float number */ 
      /* it works even if undeflow or overflow occures */ 
      } 

      cout << number1 + number2 << endl; 
    } 
+0

这是一个明显的改进,但我也应该能够使用像4000(注意逗号),仍然输出为4的数字。也许我不明白这个代码中使用的所有内容。 – user1263239 2012-03-12 06:12:49