2016-10-17 16 views
0

私は、FからCに変換するコンバーターを作成する必要があります。 プログラムには2つのパラメーターが必要です。最初に必要な変換の種類と2番目の数 例:./program -f 50.0 と出力:10.00°C = 50.00°F また、変換を行う2つの関数f2cとc2fを使用する必要があります。 これは正常に動作する私のコードですが、何らかの理由でifがアクセスされないため何もしません。ここ華氏から摂氏へC

#include <stdio.h> 
#include <float.h> 
#include <string.h> 

float c2f (float c); 
float f2c (float f); 
int main(int argc, char *argv[]) 
{ 
    char fArg = "-f"; 
    char cArg = "-c"; 

    float arg2; 
    sscanf(argv[1], "%f", &arg2); 
    if(strcmp(argv[0], &cArg) == 0) 
    { 
    float fValue = c2f(arg2); 
    printf("%f C = ", arg2); 
    printf("%f F\n", fValue); 
    } 
    else if(strcmp(argv[0], &fArg) == 0) 
    { 
    float cValue = f2c(arg2); 
    printf("%f C = ", cValue); 
    printf("%f F\n", arg2); 
    } 

} 

float c2f (float c) 
{ 
    float f; 
    f = 9*c/5 + 32; 
    return f; 
} 

float f2c (float f) 
{ 
    float c; 
    c = ((f-32) * 5)/9; 
    return c; 
} 
+0

によって率を高めるには、無条件' else'句を持っていない、と何も起こりません。だから... 'else'を追加すると、おそらく最終的に出力が得られます。例えば'...} else {printf(" argsは一致しません\ n "); } 'argv [0]'は実行ファイルの名前です。引数は '[1]'で始まります... –

+0

コマンドラインで渡す最初の引数は一般に 'argv [1]'です( 'argv [0]'は通常はプログラム名です)。 'strcmp(argv [0]、&cArg)'は 'strcmp(argv [1]、cArg)'でなければなりません。 – Dmitri

+0

ええ、テストが失敗すると、別のテストでそれをチェックしました。 argv [0]をargv [1]に変更しても、それ以外のことは起こりません。また、セグメンテーションフォールトエラーがポップアップして削除された場合は、 – mateicoman

答えて

2

2つの問題:

まず、あなたは、単一の文字に文字列定数を代入しようとすると:

char fArg = "-f"; 
char cArg = "-c"; 

あなたのコンパイラは、このことについてあなたに警告している必要があります。

char fArg[] = "-f"; 
char cArg[] = "-c"; 

そして、これらの変数からアドレス演算子&を削除するstrcmpへの呼び出しを変更:文字配列にそれらを変更します。

第2に、最初のコマンドライン引数は実際にはプログラムの名前であり、最初のユーザー引数ではありません。 `if`テストの両方に障害が発生した場合ので、どこでもあなたがargvの要素にアクセスし、1

sscanf(argv[2], "%f", &arg2); 
if(strcmp(argv[1], cArg) == 0) 
... 
else if(strcmp(argv[1], fArg) == 0) 
関連する問題