2011-02-24 70 views
1

號碼這是我的代碼:計算二命令行C++

#include <iostream> 
using namespace std; 

int main (int argc, char* argv[]) 
{ 
    int frstNumb = atoi (argv[1]); 
    int scndNumb = atoi (argv[2]); 
    int sum = 0; 
    sum = frstNumb + scndNumb; 
} 

好了,現在它的工作整數。我必須這樣做,我可以把例如「2.5和1.2」在我的參數?這個程序不會計算那種數字。幫幫我?

感謝

+0

你希望只使用STL或者是罰款,也可以使用提升,例如? ... – 0xC0000022L 2011-02-24 14:57:44

+3

聽起來非常像一個功課問題 – Tom 2011-02-24 14:57:48

+0

請每行縮進4個空格。 STL或Boost;滑稽。 – 2011-02-24 14:58:00

回答

2

是的 - 你想要atoi()

int frstNumb = atoi(argv[1]); 
int scndNumb = atoi(argv[2]); 

我建議谷歌搜索atoi()來看看它是如何工作的,它可能會幫助你在未來。

+0

或'man atoi' :) – 2011-02-24 15:05:40

+0

謝謝。 是的,這有幫助。 我還有一個問題,請。 如果我想輸入「1.20」作爲我的號碼怎麼辦?當我的參數是char時,如何使用float? – 2011-02-24 15:49:04

+0

@CRT_flow:使用'atof' – 2011-02-24 17:46:18

2

argv[1]argv[2]都是字符串。當你完成這個總和時,用atoi()調用包裝它們,以便它們被解析並轉換爲整數。

感謝Mark Loeser和walkingTarget

你的main()聲明應該是:

int main(int argc, char **argv) 

int main(int argc, char *argv[]) 

main()應該始終返回intargv應該總是是一個字符串數組。

+2

他在他的示例中將argv錯誤地定義爲int,順便說一句。它應該是char * argv [],我相信。 – walkingTarget 2011-02-24 15:01:39

+1

他對main()的整個聲明是錯誤的。 'main()'永遠不會是空洞的:) – 2011-02-24 15:03:02

+0

哎呀,我錯過了。謝謝,我會將其添加到我的答案。 – 2011-02-24 15:03:18

5

參數總是作爲字符串傳遞。首先,將主函數聲明更改爲

int main (int argc, char* argv[]) 

請注意,主函數的返回值必須是int,否則就是非標準的。

第二轉換argv[1]argv[2]爲整數與任一atoi,其中,我的口味,有點C-ISH,雖然最簡單的,或者通過boost::lexical_cast

例如

int i1 = atoi(argv[1]); //#include <cstdlib> 
int i1 = boost::lexical_cast<int>(argv[1]); //#include <boost/lexical_cast.hpp> 
1

在其他的答案提示,首先需要改變的函數聲明main - argc表示傳遞給它和argv參數總數的參數本身的陣列(每一個參數是在陣列的元件;第一元件 - argv[0] - 是執行二進制文件的路徑!argv[1]實際上是來自命令行的第一個參數)。

無論是在C和C++,您可以使用atoisscanf功能,但在C++中,你應該採取的STL stringstream的轉換功能優勢:

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

int main(int argc, char* argv[]) 
{ 
    if(argc != 3) 
    { 
     cerr << "Invalid number of operands" << endl; 
     return 1; 
    } 

    int n1 = 0; 
    int n2 = 0; 

    stringstream ss; 
    ss << argv[1];  
    ss >> n1; 
    ss.clear(); 
    ss << argv[2]; 
    ss >> n2; 

    int sum = n1 + n2; 

    return 0; 
} 
+0

投下來給出了一個完整的答案,而沒有對學習者有啓發性。 – kirakun 2011-02-24 15:39:31

+0

我正在編輯答案/添加解釋,而被低估。我個人感謝更多的解釋代碼,所以我一般同意你的看法 – 2011-02-24 15:46:47