2017-04-25 6 views
0

을 예상대로 운영자가 작동하지 않는 경우.C++ 문 또는 내가 최근에 C++을 배우고있다, 나는 방과 후 지루해하지 않도록 내가 작은 프로젝트를 시작했습니다

나는 명령 인수를하고 올바르게 포맷되지 않은 경우 "사용"메시지가 발생하는 프로그램을 만드는 오전. 내가 입력 어떤

#include <iostream> 
using namespace std; 

int main(int argc, char *argv[]){ 
    if (argc != 3) 
    { 
     cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl; 
     return 1; 
    } 
    else 
    { 
     if (argv[1] == "-f" || argv[1] == "-F") 
     { 

     } 
     else if (argv[1] == "-c" || argv[1] == "-C") 
     { 

     } 
     else 
     { 
      cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl; 
      return 1; 
     } 
    } 
    return 0; 
} 

하지만 어떤 이유로

가하는 "사용"메시지를 던졌습니다 :

여기 내 코드입니다. 누군가가 내가 잘못는지 말해 수 있다면

, 그 환상적 일 것입니다!

+1

정확히 어떻게 당신은 무엇을 입력하는 ???? 그 정보를 질문에 추가 할 수 있습니까 ??? ??? –

+2

나는 왜 모든 downvotes ... 궁금해. 그것은 아주 기본적인 질문이지만, 그것은 완벽하게 명확하고, C++ 초보자가 아닌 사람이라면 즉시 대답 할 수 있어야한다. 그러나 그것은 당신이 * C++ 초보자 일 때, 연구하기 쉽고 (OP가 이미하고있는 "언어 배우기"이외의), 또는 무엇이 잘못되었는지를 깨닫지 못하는 것입니다. – hyde

+0

귀하의 답변에 맞는 것으로 표시했습니다. 설명해 주셔서 감사합니다. 나는'strcmp (1, 2)'가'C' 일 뿐이라고 생각했다. –

답변

4

당신은 string.h 라이브러리에서 C 스타일의 문자열을 비교하는 strcmp을 사용해야합니다.

함수 strcmp(s1, s2) 복귀 0 알파벳순 아니며 -1 경우 s1s2 알파벳 순서에 1s1 경우 문자열 s2s2s1와가 동일한 경우. 당신은 == 연산자 C 스타일의 문자열을 비교하려고하는

#include <iostream> 
#include <string.h> 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
    if (argc != 3) 
    { 
     cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl; 
     return 1; 
    } 
    else 
    { 
     if (strcmp(argv[1], "-f") == 0 || strcmp(argv[1], "-F") == 0) 
     { 

     } 
     else if (strcmp(argv[1], "-c") == 0 || strcmp(argv[1], "-C") == 0) 
     { 

     } 
     else 
     { 
      cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl; 
      return 1; 
     } 
    } 
    return 0; 
} 
+0

이것은 대답으로 받아 들여지고 약간의 upvotes가 있기 때문에 주석 처리가 가능합니다 : 이것은 가능한 해결책이지만 실제로는 strcmp를 사용할 필요가 없으며 좋은 C++이 아닙니다. 'std :: string arg1 (argv [1]);'그리고 보통의 C++ 문자열 처리를 사용하면 * much * 더 좋을 것입니다. – hyde

+0

@hyde 당신은 절대적으로 옳습니다. 또한 지금해야 할 일에 대해 친절하게 제안하십시오. –

+0

[this answer] (http://stackoverflow.com/a/43604180/1717300)은 이미'std :: string' 대안을 다루고 있으므로 실제로 아무것도 할 필요가 없습니다. – hyde

5

문자열은하지 ==으로, strcmp 비교 :

char*의 작품을 비교하는 방식이 아니다
if (!strcmp(argv[1], "-c")) ... 
3

. 어느 strcmp을 사용 정도와 같은 새로운 std::string를 만들 :

std::string argument(argv[1]); 
if (argument == "-f" || argument == "-F") 
{ 
    //some code here 
} 
else if (argument == "-c" || argument == "-C") 
{ 
    //some code here 
} 
3

: 여기

는 코드입니다. 이것은 C++에서 기대하는대로 작동하지 않을 것이다.

두 개의 임의 순서를 비교하는 strcmp 또는 equal 함수를 사용해야합니다.

또한 당신은 std::string에 C 문자열을 캐스팅 할 수 다음을 비교합니다.