2016-09-26 11 views
0

私はコマンドライン入力を受け取り、[1]と[2]が数字である[1]と[2] 0ではありません)しかし、printf文字と数字の区別

if ((atof(argv[2]) == 0)) 

何らかの理由で文字と数字の両方を受け入れます。

私の現在のコードでは、0と文字を区別することはできません。これをどうやって解決するのですか?私は1週間前にコーディングを始めました。私のコードが面倒で、助けてくれればと言ってくれてありがとう、と申し訳ありません。

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

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

{ 

if ((atof(argv[2]) == 0)) 

{ 

    printf("invalid input - divide by zero not allowed\n"); 
    return 0; 

} 

else if ((atof(argv[1])) && (atof(argv[2]))) 

{ 

    float sum = 0; 

    sum = (atof(argv[1]))/(atof(argv[2])); 

    printf("%f\n", sum); 
    return 0; 

} 

else 

    printf("invalid input\n"); 
    return 0; 

} 
+2

「受け入れ」とはどういう意味ですか?手紙が入力されたら何をしたいですか? *あなたは何をしたいですか?入力行を読み込み、それを解析して数値であるかどうかを確認するには、コードを書いてそのようにしてください。 –

+0

数値に変換する前に文字をテストします。入力が非数値のときに古代C言語関数が返すものは何でしょうか? – kfsone

+0

'atof'に文字を入力すると' 0.000000'が返されます。 –

答えて

3

あなたは文字が数字は(あなたはまだ後で桁の値に変換する必要がある)であるかどうかを伝えるためにisdigitを使用することができます。

しかし実際には、sscanf/strtofatofは失敗したとは言えません)を使用し、手動の文字列 - 桁変換について心配する必要はありません。

float numerator, denominator; 
bool success = sscanf(argv[1], "%f", &numerator) == 1; 
success = success && (sscanf(argv[2], "%f", &denominator) == 1); 
if(success && denominator != 0) { // float to value comparison is almost always a bad idea 
    printf("Fraction: %f\n", numerator/denominator); 
} else { 
    printf("Failure\n"); 
} 
+0

分子が0かどうかを確認する必要がないので少し修正しました。 –

1

あなたの代わりに

float strtof(const char *nptr, char **endptr); 

nptrのは、あなたがfloatとして解釈したい文字列へのポインタですatofのstrtof機能を使用する必要があります。 endptrは、charポインタのアドレスでなければなりません(そのため、ダブルスターを持つのは、charポインタへのポインタです)。

この関数は、endptrが指し示すcharポインタで解釈された最後の文字を超えた最初の文字のアドレスを格納します。

変換が実行されない場合、ゼロが返され、nptrの値はendptrによって参照される場所に格納されます。

+0

ダブルスター関数の引数の使い方については、初心者のための答えを広げてください。 –

+0

@ウェザーヴァン! –

関連する問題