-1

プログラムの引数を double に変換したい。簡単: プログラムに double 値を引数として渡したい。しかし、それを正しくするために、変換エラーを検出したかったのです。atofそれは良い選択ではないことがわかったので、に切り替えましたsscanf。私のコードは次のとおりです。

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

int main(int argc, char **argv)
{
    argc --;
    argv++;

    double s;
    int handle =-1;

    handle = sscanf(*argv, "%lf", &s);
            if(handle == -1)
            {
                fprintf(stderr, "Invalid input double!\n");

            }else{ printf("%f\n", s);}

    return 0;
}

しかし、入力が間違っている場合、つまり./code blabla0.0000000000 が出力されます。

4

2 に答える 2

2

家族strtodの代わりに使用します。数値を解析できなかった場合scanfに返されます(残念ながら、数値が実際に である場合も同様です)。引数を使用して、関数が数値の解析を停止した場所を確認できるため、文字列に有効な数値が含まれているかどうかを確認するために使用できます。値を表現できない場合に設定します。0.00.0endptrerrno

于 2013-07-17T13:14:10.613 に答える
2

Linux Programmer's Manualscanf(3)から:

戻り値

これらの関数は、正常に一致して割り当てられた入力項目の数を返します。これは、提供された数より少ないか、初期の一致に失敗した場合はゼロになることもあります。

EOF最初の変換の成功または一致の失敗が発生する前に入力の終わりに達した場合、値が返されます。EOFは、読み取りエラーが発生した場合にも返されます。この場合、ストリームのエラー インジケータ ( を参照error(3)) が設定errnoされ、エラーを示すように設定されます。

したがって、 を確認する必要がありますhandle < 1

を試すこともできますstrtod(3)

于 2013-07-17T13:14:31.093 に答える