2017-10-25 1 views
-2

argv [1]を浮動小数点値に変換しようとしていますが、コンパイルエラーが発生します。ここに私のコードです。char * argv [] to浮動小数点型のキャスト

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

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

     double circleArea = 3.14159 * atof(argv[1]) * atof(argv[1]); //this works 

     double circleArea = 3.14159 * (double) argv[1] * (double) argv[1]; //this does not 

     return 0; 

}` 

なぜ最初のステートメントはコンパイルされ、2番目のステートメントはコンパイルされませんか? (double) argv[1]atof(argv[1])と同じでなければなりませんか?

更新:これらは私が取得エラーです:

circleArea.c: In function ‘main’: 
circleArea.c:9:2: error: pointer value used where a floating point value was expected 
    double area = 3.14159 * (double) argv[1] * (double) argv[1]; //this does not 
    ^~~~~~ 
circleArea.c:9:2: error: pointer value used where a floating point value was expected 
+2

'argv [1]'は 'char *'であり、 'char *'を 'double'にキャストすることは意味をなさない。 _キャスティング_は_converting_と同じではありません –

+3

@MichaelWalz - 実際にキャストは変換の一種です。ここでの問題は、 'char *'を 'float'(または' double')に変換することは、文字列を解釈して解析して 'float'を得ることと同じではないということです。後者は 'atof()'がするものです。 – Peter

+0

@Peterはい、それは良い説明です。 –

答えて

0

あなたが見ている問題は、/ A変換をキャストに関連しています。 2行目ではエラーが発生していますが、文字列をdoubleに変換する必要があります。値をキャストしているだけです。つまり、「コンパイラにあなたの持っているものにdoubleがあることを伝えています。 。同様のタイプのためのCで

鋳造作品 - intshortdoubleに、floatfloatlongに、intchar。もちろん、そこでのコンバージョンの精度が低下する可能性があります。しかし、たとえばint []intに変換することはできません(実際はそうかもしれませんが、確かに予期しない結果があります)。その1つが配列であり、もう1つが単一の変数であるためです。

機能させるには、atod機能を使用する必要があります。詳細についてはthis postを確認してください。

関連する問題