【C言語】コマンドライン引数で小数を含むdouble型の数値を受け取る方法

この記事では、C言語でコマンドライン引数から受け取った小数を含むdouble型の数値を正しく処理する方法と、注意点やエラーハンドリングの方法について解説します。

目次から探す

double型の数値を受け取る方法

C言語では、コマンドライン引数から受け取った文字列をdouble型の数値に変換する方法がいくつかあります。

ここでは、主に以下の3つの方法を紹介します。

atof関数を使った方法

atof関数は、与えられた文字列をdouble型の数値に変換するための関数です。

以下は、atof関数を使ってコマンドライン引数から受け取った文字列をdouble型の数値に変換する例です。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("引数が不足しています。\n");
        return 1;
    }
    double num = atof(argv[1]);
    printf("入力された数値: %f\n", num);
    return 0;
}

上記のコードでは、atof(argv[1])を使ってコマンドライン引数から受け取った文字列をdouble型の数値に変換しています。

変換結果はnumに格納され、printf関数を使って表示しています。

sscanf関数を使った方法

sscanf関数は、与えられた文字列から指定したフォーマットに従ってデータを読み取るための関数です。

以下は、sscanf関数を使ってコマンドライン引数から受け取った文字列をdouble型の数値に変換する例です。

#include <stdio.h>
int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("引数が不足しています。\n");
        return 1;
    }
    double num;
    sscanf(argv[1], "%lf", &num);
    printf("入力された数値: %f\n", num);
    return 0;
}

上記のコードでは、sscanf(argv[1], %lf, &num)を使ってコマンドライン引数から受け取った文字列をdouble型の数値に変換しています。

変換結果はnumに格納され、printf関数を使って表示しています。

自作の関数を使った方法

もし、atof関数sscanf関数が使用できない場合や、独自の変換方法を実装したい場合は、自作の関数を使って文字列をdouble型の数値に変換することもできます。

以下は、簡単な自作の関数を使ってコマンドライン引数から受け取った文字列をdouble型の数値に変換する例です。

#include <stdio.h>
double myAtof(const char *str) {
    double result = 0.0;
    double decimal = 0.1;
    int sign = 1;
    int i = 0;
    if (str[i] == '-') {
        sign = -1;
        i++;
    }
    while (str[i] != '\0') {
        if (str[i] == '.') {
            i++;
            break;
        }
        result = result * 10 + (str[i] - '0');
        i++;
    }
    while (str[i] != '\0') {
        result = result + (str[i] - '0') * decimal;
        decimal *= 0.1;
        i++;
    }
    return result * sign;
}
int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("引数が不足しています。\n");
        return 1;
    }
    double num = myAtof(argv[1]);
    printf("入力された数値: %f\n", num);
    return 0;
}

上記のコードでは、myAtofという自作の関数を使ってコマンドライン引数から受け取った文字列をdouble型の数値に変換しています。

自作の関数では、文字列を1文字ずつ処理しながら数値に変換しています。

注意点とエラーハンドリング

コマンドライン引数から受け取った文字列をdouble型の数値に変換する際には、以下の注意点とエラーハンドリングが必要です。

入力値のバリデーション

コマンドライン引数から受け取った文字列が正しい形式の数値であるかを確認するために、バリデーションを行うことが重要です。

例えば、文字列が数値の形式に合致しているか、小数点が1つだけ含まれているか、などをチェックすることができます。

エラーハンドリングの方法

コマンドライン引数から受け取った文字列が正しい形式の数値でない場合や、引数が不足している場合など、エラーが発生する可能性があります。

このような場合には、適切なエラーメッセージを表示してプログラムを終了させるなど、適切なエラーハンドリングを行う必要があります。

これらの方法を使って、コマンドライン引数から受け取った小数を含むdouble型の数値を正しく処理することができます。

目次から探す