2013-10-17 63 views
-1

我正在編寫一個程序,它接受命令行參數並對它們執行基本的算術運算。我使用getopt來獲取參數,我將它們存儲爲字符串。下面是將命令行參數轉換爲C中的十進制數

char *distance = NULL; 
char *time = NULL; 
char *pace = NULL; 

我儲存的參數變量但是我怎麼然後將其轉換爲小數?因此,例如「5」將變爲5.00或「6.12」將變爲6.12。我試過搜索,但其他解決方案似乎不適合我。

我曾嘗試做

double testnum; 
testnum = atof(time); 

,但我得到

錯誤:東西不是一個結構或聯合

+0

你有不符合您顯示代碼段中的錯誤消息。請提供導致錯誤的實際代碼。 –

回答

0

看看在atof功能要求會員「testnum」。它需要一個char *並試圖解析一個double。

+0

謝謝,我已經試過了,請參閱我的編輯 – Pattle

2

只需使用atof

double atof (const char* str); 

解析C字符串海峽,解釋它作爲一個浮點數的內容,並返回其值作爲雙。

雖然它並不特別健壯:特別是如果輸入不可轉換,它將返回零,如果輸入數字太大,未定義的行爲

+3

我寧願推薦['strtof'](http://en.cppreference.com/w/c/string/byte/strtof),因爲它可以更容易地檢查對於錯誤。 –

0

你可以用適當的類型由scanf開始。

scanf("%f", &time); 

然後在需要時使用printf將類型轉換爲字符串。

如果您確實需要從字符串轉換類型,請查找atoX樣式函數進行轉換。例如,這裏是轉換a(ASCII)到i(整數)程序

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    int val; 
    char str[20]; 

    strcpy(str, "98993489"); 
    val = atoi(str); 
    printf("String value = %s, Int value = %d\n", str, val); 

    strcpy(str, "tutorialspoint.com"); 
    val = atoi(str); 
    printf("String value = %s, Int value = %d\n", str, val); 

    return(0); 
}enter code here 
+0

您可以查看鏈接http:// stackoverflow。com/questions/4392665/convert-string-to-float-without-atof -in-c – Anand

+0

@Anand回過頭來,我也會重新實現可用的函數。這是學習一些類型的東西的好方法。當存在成​​本較低的替代方案時,這也是浪費時間和引入意外行爲(錯誤)的絕佳方式。可能有些時候真的需要在舊功能上出現新的皺紋,但大多數情況下,這些功能可以通過將舊功能組合成常規來管理。在這些非常特殊的情況之外,重用標準函數通常會更好。 –

0

您提供的示例代碼不匹配你的錯誤。該錯誤告訴我們在結構中找不到testnum

我是猜測您有一個指向結構的指針並使用非指針.來訪問成員。 您有一個非指針結構並使用指針->來訪問該成員。

3

您也可以嘗試strtof()

#include <stdlib.h> 
#include <stdio.h> 

int main(void) 
    { 
     char *string, *stopstring; 
     double x; 
     float f; 
     long double ld; 

     string = "3.1415926This stopped it"; 
     f = strtof(string, &stopstring); 
     printf("string = %s\n", string); 
     printf("strtof = %f\n", f); 
     printf("Stopped scan at \"%s\"\n\n", stopstring); 
    } 
+0

+1提出唯一真正可用的方法。 – alk