2013-12-16 72 views
2

我在寫一個非常基本的命令行C++應用程序,它在執行時帶有參數。將字符數組轉換爲浮點數?

我剛剛開始使用C++,看起來顯然您只能將char**作爲參數的數據類型。我想以兩個float作爲參數(稍後將它們添加到一起),但似乎無法將字符數組轉換爲浮點數。

我試過static_cast<float>(argv[0])stof(argv[0])來施放這些值,並且都給出編譯器錯誤(無法強制轉換並且沒有在作用域中分別定義)。

如果回答任何問題,我正在使用Code::Blocks IDE

我的代碼:

#include <iostream> 
#include <string> 

/** 
* author: 2mac 
* 
*/ 

using namespace std; 

void derp(); 
float getSum(float num1, float num2); 

int main(int argc, char** argv) 
{ 
    float num1 = static_cast<float>(argv[0]); 
    float num2 = static_cast<float>(argv[1]); 

    if (argc != 0 || argc != 2) 
     cout << "Usage: hello-world [args]\nargs: none OR <num1> <num2> to be added together" << endl; 
    else 
    { 
     switch (argc) 
     { 
     case 0: 
      derp(); 
      break; 
     case 2: 
      derp(); 
      cout << num1 << " + " << num2 << " equals " << getSum(num1,num2) << endl; 
      break; 
     } 
    } 
    return 0; 
} 

void derp() 
{ 
    cout << "Hello, world!\n"; 
    cout << "It's time to lern some C++!" << endl; 
} 

float getSum(float num1, float num2) 
{ 
    return num1 + num2; 
} 
+0

的argv [0]將是你的程序的名稱。第一個參數使用argv [1],第二個參數使用argv [2]等。但是,無論何時使用argv [1 ... n],都應該檢查argc是否足夠大。它始終有一個至少爲1的值(程序名始終在argv [0]中),並且對於命令行上的每個參數都會加1。所以你的支票應該是關於argc == 1或3而不是0和2.你的支票似乎是不正確的。 !=與一個或。 – Scooter

回答

2

使用給你的輸入轉換爲浮點數,

double f1, f2; 
if (argc == 2) 
{ 
    f1 = atof (argv[0]); 
    f2 = atof (argv[1]); 
} 
+0

編譯器讓我爲此感到悲傷。與之前類似,'atof'沒有在範圍中定義。 – 2mac

+1

你需要** #include ** – David

+2

如果這是C++,**不要**使用stdlib.h。改用'cstdlib'。 – Sinkingpoint

1

在C++甲char**就是這樣,一個指針的指針到一個字符,因此不可轉化到float(或者對於該問題的任何數值)直接因此,你的第一例子會失敗。假設你確信它們實際上是float形式,則可以使用中間函數atofstrtof(注意str tof,不是stof,爲什麼第二個示例失敗)轉換這些值。

+0

好的。我修改了代碼來使用'strtof'來代替,但是我仍然得到一個錯誤:編譯時,'strtof'沒有在這個範圍消息中聲明。 – 2mac

1

您只是通過類型轉換將char *變量轉換爲float。它將指向float的類型轉換值,而不是浮動的字符串。

您需要使用函數,如atof,strtof將字符串轉換爲浮點數。或者你可以編寫自己的函數來將字符串轉換爲浮點數。