2017-12-17 3 views
-2

だから私はこの文字列を持っている:C言語:double parse existsですか?

1, 3.8 , 4.0 , 2 e 

そしてcommatabと私のstringを分割し、この機能と私の番号を印刷:

void readuserinput(char *ch) 
{ 
    ch = strtok(ch, ", \t"); 
    char *ptr; 
    double ret; 
    while (ch) 
    { 
     ret = strtod(ch, &ptr); 
     double d = atof(ch); 
     printf("%f", d); 
     ch = strtok(NULL, ", \t"); 
    } 
} 

だから場合には、私は例eのための非番号を持って、任意のそれを確認する機会と、これは数字の印刷エラーではない場合は?

C言語にはdoubleがありますか?

+0

うわー、 'ptr'は、最初に一致しない文字を指します... –

+0

ptrが何であればチャックする必要がありますか? – user2214609

答えて

1

strtodを使用すると、フォームストリングをダブルに変換できます。ドキュメントごとに、空白文字は無視され、文字列が有効な浮動小数点数でない場合は0が返されます。文字列の最初の空白以外の文字がゼロかどうかを簡単にチェックできるはずですエラーがあったかどうかを検出します。

ただし、文字列が1.23xer43の場合、1.23(つまり、最初の文字を変換する)になります。

+0

私の番号がゼロの場合は? – user2214609

+1

これで、 'endptr'は開始アドレスとは異なる場所を指しているはずです。 – Gerhardh