2014-02-08 71 views
0
#include <string> 
#include <iostream> 

using namespace std; 
int main(int argc, char* argv[]) { 
//Make sure there is an argv[1] to check 
if (1 < argc) { 
    std::string option = std::string(argv[1]); 
    if ("mean" == option) { 
     float sum = 0; 
     cout << (argc)<<"\n"; 
     for (int i = 0; i<= argc; i++){ 
     sum = sum+reinterpret_cast<int>(argv[i]); 

     } 
     cout<<(sum)<<"\n"; 
     cout<<(argc)<<"\n"; 
     cout<<(sum/argc)<<"\n"; 
    } 
return 0 
} 

我是新來的C++,但此代碼返回我輸入的可笑值。例如,我使用命令行「homework1 mean 1 2 3 4」,值在四元組中。我使用的是64位機器,如果有幫助的話,我是新來的C++,所以我不確定問題是什麼。謝謝你的幫助。簡單的平均值計算器的問題

+1

'reinterpret_cast'不會將字符串轉換爲整數... –

+1

作業問題顯示合理數量的自己的工作,哇。 :-) – Xarn

回答

3

首先,reinterpret_cast不會將字符串轉換爲整數。使用類似std::stod的東西。 (取決於有多少錯誤檢查你想要做的。)

其次,這些邊界

for (int i = 0; i<= argc; i++) 

就不行,因爲argv的[0]是可執行文件的名稱和argv [ARGC]是一個空指針。使用

for (int i = 2; i < argc; i++){ 
    sum += std::stof(argv[i]); 
} 

注意,你的編譯器需要有C++ 11這個工作的支持。 (std::stof等已添加到標準的C++ 11修訂版中。)如果不是,則需要使用sum += strtof(argv[i], NULL);。欲瞭解更多詳情,請參閱documentationstrtof

+0

對不起,我在i = 1之前就已經看到了,當我試圖看看程序運行的時候,sum和argc是如何改變的(我剛剛瞭解了argc在10分鐘前的含義)。另外,你能告訴我std :: stod的語法嗎?我會只寫std :: stod(argv [i])嗎? – user3081246

+0

'argv [argc]'是一個空指針。 – chris

+0

@chris我不好,改變它。 – Xarn