作者 主題: 如何將字元陣列轉換成浮點數?  (閱讀 5398 次)

0 會員 與 1 訪客 正在閱讀本文。

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
如何將字元陣列轉換成浮點數?
« 於: 2009-10-14 20:23 »
各位高手~
如何將字元陣列轉換成浮點數?以下列程式為例,所印出的result和原本的字元陣列(num)結果不同,請問要如何修正?
代碼: [選擇]
     #include <string.h>

      main()
      {
        char  num[] ="0.22345";
        char num2[10];
        int i =0;
        for(i;i<strlen(num);i++)
        {
                num2[i]= num[i];
        }
        float result = atof(num2);
        printf("result = %f\i",result);

        return 0;
      }


« 上次編輯: 2009-10-15 09:40 由 pinky »

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
回覆: 如何將字元陣列轉換成浮點數?
« 回覆 #1 於: 2009-10-15 03:48 »

"以下列程式為例",問法一看怎麼就是老師出的題目?

還有請你思考清楚何謂 "字元陣列",所以 "char  num[] = {0.22345};" 表示法寫法有何問題。

既然是 homework 請多用心吧,論壇上常常有一堆 homework 的問題,問完也沒謝謝過對方,然後一陣子那個帳號就沒再出現過了。
I am kenduest - 小州

my website: http://kenduest.sayya.org/

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
回覆: 如何將字元陣列轉換成浮點數?
« 回覆 #2 於: 2009-10-15 09:10 »
這不是作業哩~~~我想你搞錯了@@@@

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
回覆: 如何將字元陣列轉換成浮點數?
« 回覆 #3 於: 2009-10-15 11:01 »
你改了原本的程式碼,請不要這樣子改內容。有問題請回覆方式告知,要不然問題會亂掉。

首先我看不懂為何你要有這段程式碼:

代碼: [選擇]

        for(i;i<strlen(num);i++)
        {
                num2[i]= num[i];
        }


你是要複製一份嗎?直接 num 這個字元陣列拿去給後面 atof 使用不就可以了嗎?莫非有特殊用途?若你要複製一份,可以用 string.h 內的 strcpy() 會更快

代碼: [選擇]
float result = atof(num2);
printf("result = %f\i",result);

你的問題應該是這顯示結果不對吧?原因很簡單就是你沒有引入正確的 header,所以系統編譯器不知道 atof 的函數原型是啥,所以用猜的:

代碼: [選擇]
int atof(...);
那可想而知結果一定是錯誤的。所以以 linux 來說引入 stdlib.h 即可。

建議請於編譯時候,以 gcc 來說傳入 -Wall 參數可以提示你這類可能的警告問題點。
« 上次編輯: 2009-10-15 11:06 由 kenduest »
I am kenduest - 小州

my website: http://kenduest.sayya.org/

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
回覆: 如何將字元陣列轉換成浮點數?
« 回覆 #4 於: 2009-10-15 11:09 »

還有補充一下,不要用這樣的程式碼寫法:

代碼: [選擇]
for(i;i<strlen(num);i++)
因為 strlen() 函數會被呼叫很多很多次,這就非常沒有效率。比方像是這樣用比較有效率:

代碼: [選擇]
for(j=strlen(num);i<j;i++)
I am kenduest - 小州

my website: http://kenduest.sayya.org/

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
回覆: 如何將字元陣列轉換成浮點數?
« 回覆 #5 於: 2009-10-15 11:12 »
為什麼會用如下程式,是因為有特殊用途,所以才舉這個例子,而不用strcpy
代碼: [選擇]
   for(i;i<strlen(num);i++)
        {
                num2[i]= num[i];
        }
至於顯示的部份,有點筆誤應該是
代碼: [選擇]
printf("result = %f\n",result);
至於將字串轉成float,是使用atof
代碼: [選擇]
float result = atof(num2);但是顯示轉的結果卻不對,所以才請問大大,要怎麼轉 ??

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
回覆: 如何將字元陣列轉換成浮點數?
« 回覆 #6 於: 2009-10-15 11:15 »

請再次閱讀我回應的內容,請引入 stdlib.h 標頭檔案。

另外請翻書找一下 "函數原型的" 的重要性。
I am kenduest - 小州

my website: http://kenduest.sayya.org/

z7797

  • 可愛的小學生
  • *
  • 文章數: 1
    • 檢視個人資料
回覆: 如何將字元陣列轉換成浮點數?
« 回覆 #7 於: 2010-07-13 14:36 »

還有補充一下,不要用這樣的程式碼寫法:

代碼: [選擇]
for(i;i<strlen(num);i++)
因為 strlen() 函數會被呼叫很多很多次,這就非常沒有效率。比方像是這樣用比較有效率:

代碼: [選擇]
for(j=strlen(num);i<j;i++)

呼呼小技巧,意外看到,感謝。