2017-02-02 6 views
-5

명령 줄 인수를 'up'또는 'down'또는 0에서 0.50, 1까지의 값으로 가져 오는 방법은 무엇입니까? (여기서 _TCHAR * argv []를 사용해야 만합니다)? 그것이 작동하게하는 것은 불가능합니다. 천재가 있습니까?캐스트를 입력 할 수 없습니까?

int _tmain(int argc, _TCHAR* argv[]) { 
    double SDK; 

    // command line input: 
    // user.exe up 
    // user.exe down 
    // user.exe 0.50 
    if (argv[1] == 'up') { 

    SDK= _tstof(0.85); // FAIL _T or (TCHAR*) or ... 
    } 
    else if(argv[1]== 'down') { 
    SDK= _tstof(0.50); // FAIL _T or (TCHAR*) or ... 
    } 
    else { 
    SDK= _tstof(argv[1]); // This works 
    } 

    // 
    // 3rd party SDK needs _TCHAR* argv[] 
    // 

} 

편집 :는 다음과 같이 작동하지만 그것을하고 적절한 방법이 아니다. 이 작동하지 않습니다

if (argv[1] == 'up') 

:

#include "stdafx.h" 
#include <stdio.h> 
#include <windows.h> 

int _tmain(int argc, _TCHAR* argv[]) { 
    double SDK; 

    if (argv[1][0] == 'u') { 
     printf("up: \n"); 
     SDK = 0.85; 
    } 
    else if (argv[1][0] == 'd') { 
     printf("down: \n"); 
     SDK = 0.50; 
    } 
    else { 
     printf("else: \n"); 
     SDK = _tstof(argv[1]); 
    } 

} 
+4

'는 argv [1] == 'up''와'변수는 argv [1] == '당신이 생각하는 일을하지 않을 수 있습니다 down''는 –

+0

귀하의 문자열 비교가 작동하지 않습니다. strcmp를 사용하십시오. –

+1

@YvesDaoust'strcmp'는 작은 따옴표로 작동하지 않습니다 –

답변

1

코드는 여러 문제가있다. C/C++에서는 문자열 리터럴에 "을 사용해야합니다. 또한 문자열 대신 포인터를 비교합니다.

if(strcmp(argv[1], "up") == 0) 

또 다른 문제는 그것이 이미 float로 변환하는 문자열에 대한 포인터 인 것처럼 float를 사용하는 동안 float로 문자열을 변환 _tstof의 사용이다.

마지막 줄 : 당신의 인수가 숫자의 캐릭터 라인 표현이 아닌 경우

SDK= _tstof(argv[1]); 

도 작동하지 않을 수 있습니다. 따라서 문자열이 실제로 숫자인지 아닌지 확인할 수 있습니다.

#include <Windows.h> 
#include <WinNT.h> 
int _tmain(int argc, TCHAR* argv[]) { 
    double SDK; 

    // command line input: 
    // user.exe up 
    // user.exe down 
    // user.exe 0.50 
    if (strcmp(argv[1], "up") == 0) 
    SDK= 0.85; 
    else if(strcmp(argv[1], "down") == 0) 
    SDK= 0.50; 
    else 
    SDK = atof(argv[1]); 

    // 
    // 3rd party SDK needs _TCHAR* argv[] 
    // 
} 
+0

Visual Studio 2015 : if (_tcscmp (argv [1], "up") == 0) 오류입니다. 타입 "char * 타입의 인수가"const wchar_t "타입의 파라미터와 호환되지 않습니다 – YumYumYum

+1

TCHAR을 사용하는 것이 이러한 문제를 피하는 것이므로 프로젝트 설정이 잘못되었습니다. 대신에 strcmp를 사용할 수 있습니다. – Devolus

+0

사용할 때 if (strcmp (argv [1], "up") == 0)도 오류이므로 "_TCHAR *"유형의 인수가 "const char *"유형의 매개 변수와 호환되지 않습니다 – YumYumYum