2016-04-30 8 views
2

私は与えられた引数を追加して結果を出力する関数を持っています。cでデータ型を変更する方法

整数の場合、全く問題はありませんでした。文字列引数 - > intを変更するためにatoiを使用しました。
:./main 3 4 5 12を印刷します。

もし私が持っていれば、/ main 4.5 6 5.5?Cでこれをどうやってやるのですか?どのように関数は "見る"ことができますか?引数型を浮動させる必要がありますか?

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

int main(int argc, char* argv[]) 
{ 
    int i , sum = 0; 
    for(i=1; i < (argc); ++i) 
    sum += atol(argv[i]); 
    printf("%d\n", sum); 

    return 0; 

} 

答えて

4

のように過負荷を全く機能は、このようにあなたは、このように、atofを使用する必要があり、存在しない:実数ではなく、数値を整数として扱うために

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

int main(int argc, char* argv[]) 
{ 
    int i; 
    double sum = 0; 
    for(i = 1; i < (argc); ++i) 
    sum += atof(argv[i]); 
    printf("%f\n", sum); 

    return 0; 

} 

出力:

[email protected]:~$ ./a.out 4.5 6 5.5 
16.000000 

66.0のように扱われているため。


あなたにもこれを参照することもできます。How to convert string to float?

+0

を使用して問題として次のような問題が発生しました。私は誤入力問題を追加するのを忘れていました。例:./main 4 4 n 5 これは、何か気が紛らわしいというヒントを与えるはずです。方程式のnをそのまま残すのではなく。 – letter

+0

@letterあなたの質問に答えるので、あなたは答えを受け入れるべきです。 :)あなたが忘れてしまったことについては、 'isdigit()'を使ってください(またはhttp://stackoverflow.com/questions/16644906/how-to-check-if-a-string-is-a-numberを読んでください)。それでも問題が解決しない場合は、新しい質問を投稿し、リンクを私と共有してください。 :) – gsamaras

0

あなたは、atofは文字列と%fprintf指定子を解析するために浮動小数点数を格納するのにdoubleを使用する必要があります。

+0

AFAIK、 '%lf'はダブルデータ型の書式指定子です。 – user3078414

+0

@ user3078414 [printf関数ファミリの違いはありません](http://stackoverflow.com/questions/25860850/what-is- fとlf-in-cとの間の差異)。 – Roman

2

以下のコードをテストしました。小数点以下2桁まで浮動小数点数を出力します。

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

int main(int argc, char* argv[]) 
{ 
    int i; 
    double sum = 0; 
    for(i=1; i<argc; i++) 
     sum += atof(argv[i]); 
    printf("%.2f\n", sum); 

    return 0; 
} 
0

(Linuxのマニュアルは正しいが使用することを含んでいる私に教えてくれないので)私はは、strtodのための暗黙的な宣言警告が表示されますが、以下のこのコードが作業を行います。

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

int main(int argc, char* argv[]) 
{ 
    int i; 
    double sum=0; 
    for(i=1; i < argc; ++i) 
sum += strtod(argv[i],NULL); 
    printf("%f\n", sum); 

    return 0; 

} 

マニュアルも述べてatoi()

The atoi() function converts the initial portion of the string pointed to by nptr to int. 
The behavior is the same as 

strtol(nptr, (char **) NULL, 10); 

except that atoi() does not detect errors. 
関連する問題