2012-03-12 38 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