2016-10-24 75 views
-2

所以我想從命令行運行程序,格式爲: (./program -f)或(./program -c),具體取決於我是否想將一個數字從華氏到攝氏(-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; 
} 

這是我得到警告:

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。

+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條件來檢查是否正在傳遞所需數量的參數。 –