2016-10-24 8 views
-2

したがって、番号を変換するかどうかによって、 (./program -f)または(./program -c)の形式でコマンドラインからプログラムを実行したいとします。華氏から摂氏(-f)または摂氏から華氏(-c)までです。私が持っている問題は、私はエラー/警告を得ることです。私のアプローチは正しいと信じていますが、私はまだ自分のスキルを開発しています。コマンドラインを使用した方法の検索

warning: initialization from incompatible pointer type [-Wincompatible-pointer-types] 
char **p = &argv[1]; 

warning: passing argument 1 of ‘strcmp’ from incompatible pointer type [-Wincompatible-pointer-types] 
if(strcmp(p, c) == 0) 

note: expected ‘const char *’ but argument is of type ‘char **’ 
extern int strcmp (const char *__s1, const char *__s2) 

warning: implicit declaration of function ‘atof’ [-Wimplicit-function-declaration] 
float returnc = c2f(atof(argv[2])); 

warning: passing argument 1 of ‘strcmp’ from incompatible pointer type [-Wincompatible-pointer-types] 
else if(strcmp(p, f) == 0) 

note: expected ‘const char *’ but argument is of type ‘char **’ 
extern int strcmp (const char *__s1, const char *__s2) 

私は私のコードを実行していると、それだけでそのは-f/-cを認識していないことを意味する「間違った」をデフォルトに行く:

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

float c2f(float c); 
float f2c(float f); 

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

float f2c(float f) 
{ 
    return ((f - 32) * 5/9); 
} 

int main(int argc, char const *argv[]) 
{ 
    char c[3]; 
    char f[3]; 

    strcpy(c, "-c"); 
    strcpy(f, "-f"); 
    char **p = &argv[1]; 

    if(strcmp(p, c) == 0) 
    { 
    float returnc = c2f(atof(argv[2])); 
    printf("%f\n", returnc); 
    } 

    else if(strcmp(p, f) == 0) 
    { 
    float returnf = f2c(atof(argv[2])); 
    printf("%f\n", returnf); 
    } 
    else 
    printf("Wrong\n"); 

    return 0; 
} 

これらは私が得る警告しています。

+0

エラー/警告メッセージが表示された場合は質問に含めてください! <はい、私は叫んでいます> – John3136

+0

エラーメッセージと警告は何ですか?あなたの質問にそれらを編集してください。 – DeiDei

+0

@ John3136提案していただきありがとうございます。私は警告を追加しました –

答えて

1

セグメント違反やその他の構文エラーがありました。また、図書館は含まれていませんでした。私はあなたのコードをデバッグし、それは動作します。

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

float c2f(float c); 
float f2c(float f); 
int main(int argc, char** argv) 
{ 

    char c[3]; 
    char f[3]; 

    strcpy(c, "-c"); 
    strcpy(f, "-f"); 
    char* p = argv[1]; 
    char* s=argv[2]; 
    float temp=atof(s); 
    printf("%s value of p given and value of temperature %f\n",p,temp); 
    if (argc<3) 
    { 
     printf("Please specify two parameters \n"); 
    } 
    else 
    { 

     if(strcmp(p, c) == 0) 
     { 

     float returnc = c2f(temp); 

     printf("%f\n", returnc); 
     } 
     else if(strcmp(p, f) == 0) 
     { 

     float returnf = f2c(temp); 

     printf("%f\n", returnf); 
     } 
     else 
     { 
     printf("Specify either -c or -f as parameters\n"); 
     } 
    } 
    return 0; 
} 



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

float f2c(float f) 
{ 
    return (f - 32) * 5/9; 
} 

今後、人々があなたを助けやすいように、エラーや警告の種類を含めてください。

+0

ありがとうございます。私は今理解している –

+0

コードを提供するだけで本当に役立つわけではありません。どのようなエラーを修正しましたか?どうやって? OPはどうしたの? – Martin

+0

引数argvのアドレスが 'char * p'に割り当てられました。また、 'argv'は二重ポインタであったはずです。ライブラリ 'stdlib.h 'は' atof() 'を使うために含まれていたはずです。必要な数のパラメータが渡されているかどうかを確認するif条件も追加しました。 –

関連する問題