2016-10-17 6 views
0

나는 F에서 C로 변환하고 C로 변환하는 변환기를 만들어야합니다. 프로그램에는 두 개의 매개 변수가 있어야합니다. 첫 번째는 필요한 변환 유형이고 두 번째는 두 개의 매개 변수를 가져야합니다. 예 : ./program -f 50.0 및 출력 : 10.00 ° C = 50.00 ° F 또한 변환을 수행하는 두 가지 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 {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

두 가지 문제 :

첫째, 당신은 하나의 문자에 문자열 상수를 할당하려고 :

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

귀하의 컴파일러는이에 대해 경고해야합니다.

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

을 그리고 이러한 변수에서 주소의 운영자 &을 제거하기 위해 strcmp에 전화를 수정 : 문자 배열로 변경합니다.

두 번째, 첫 번째 명령 줄 인수는 실제로 첫 번째 사용자 인수가 아닌 프로그램의 이름입니다. 은`if` 테스트가 모두 실패 할 경우 그래서 어디든 당신이 argv의 요소에 액세스, 당신은 더 무조건`else` 조항이없고, 아무 반응이 없습니다, 1

sscanf(argv[2], "%f", &arg2); 
if(strcmp(argv[1], cArg) == 0) 
... 
else if(strcmp(argv[1], fArg) == 0) 
관련 문제