2017-10-02 7 views
-1

프로젝트 지정을하고 있는데 명령 플래그가 작동하지 않는 것 같습니다. 온라인에서 도움을 찾고 있지만이 주제에 관해서는 많이 찾을 수 없습니다. 선생님은 이것이 무엇인지 또는 어떻게하는지 설명하지 않았으므로 온라인에서 찾은 것에 기초하여 일을하고 있습니다. 모든 해결책이나 설명은 크게 감사하겠습니다.내 C++ 프로그램에서 내 명령 플래그를 활성화하는 데 어려움을 겪고 있습니다.

#include<fstream> 
#include<iostream> 
#include<vector> 
#include<sstream> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    if(argc != 0) 
     { 
      for (int i = 0; i < argc; i++) 
      { 
       ifstream file1(argv[i]); 
       string arg1 = argv[i]; 
       int counter = 0; 
       int counter2 = 0; 
       string longest, word; 
       char letter; 
       vector<string> arrayWord, numString; 
       vector<int> largestNum; 
       stringstream ss; 

      if(file1.is_open() == false) 
       { 
       cout << "File Not Found\n"; 
       continue; 
       } 
      else if (arg1 == "c") 
       { 
        while (!file1.eof()) 
        { 
         letter = file1.get(); 

         if(letter != ' ') 
         { 
          word = word + letter; 
          letter = file1.get(); 
          counter++; 
         } 
         else if (letter == ' ') 
         { 
          arrayWord[counter2] = word; 
          largestNum[counter2] = counter; 
          ss << largestNum[counter2]; 

          numString[counter2] = ss.str(); 

          counter2++; 
          word.clear(); 
         } 
        } 
        longest = arrayWord[0]; 
        for (int i = 0; i <= counter2; i++) 
        { 
         if (largestNum[counter2] < largestNum[counter2 + 1]) 
         { 
          longest = arrayWord[counter2 + 1] + "(" + numString[counter2 + 1]; 
         } 
         else if (largestNum[counter2] == largestNum[counter2 + 1]) 
         { 
          longest = longest + "(" + (numString[counter2 + 1]) + ", " + arrayWord[counter2 + 1] + "(" + numString[counter2 + 1]; 
         } 
         else 
         { 
          longest = arrayWord[counter2] + "(" + numString[counter2]; 
         } 
        } 
        cout << longest << endl; 
        continue; 
       } 
       else 
       { 
        cout << "Program is running with an invalid command" << endl; 
        continue; 
       } 
      } 
     } 
    return 0; 
} 
+1

* 어떤 해결책이나 설명 ... * 무엇을 원하니? – CroCo

+0

나는 명령 플래그를 작동시킬 수 없으며 누군가가 왜 작동하지 않는지 설명 할 수 있기를 바라고 있습니다. – HanKuSung

+0

스택 오버플로에 오신 것을 환영합니다! 문제 설명이 단순히 "작동하지 않는다"는 경우 솔루션을 제공하기가 어렵습니다. 일어날 것으로 예상되는 것과 그 결과가 실제 결과와 어떻게 다른지에 대한 자세한 설명을 제공하려면 질문을 편집하십시오. 좋은 설명이 무엇인지 힌트를 얻으려면 [ask]를 참조하십시오. –

답변

0

명령 줄에서 각 항목에 대해 동일한 기능을 실행하려고하는 것처럼 보입니다.

실제 기능을 별도의 기능 (process_file)으로 분할하는 것이 좋습니다. 그런 다음 인수를 반복하여 기능을 실행할 수 있습니다.

참고 :argv[0] 명령 행에 입력 한 사용자가 프로그램을 얻을 무엇 때문에 우리가 argv[1]에서 시작하고있다. 이것은 일반적으로 사용자가 입력 한 것으로 가정하고 과 비슷합니다. ./my-program file1.txt file2.txt

아래의 예는 각 파일에 대한 기능을 실행합니다.

int main(int argc, char ** argv){ 
    int i; 
    for (i = 1; i < argc; i++){ 
     printf("Processing \"%s\":\n", argv[i]); 
     process_file(argv[i]); 
    } 
} 
+0

죄송합니다. 그게 무슨 뜻인지 무슨 뜻인지 이해가 안 되니? 우리 학교는 자바를 사용하지만 C++을 사용하는 다른 학교의이 과정이 필요합니다. 따라서 언어에 익숙하지 않고 선생님이이 명령 플래그를 설명하지 않았거나 클래스에서 언급하지 않았습니다. 나는 바보처럼 들린다면 미안하지만 나는 이것으로 정말 끝내 준다. – HanKuSung

+0

@HanKuSung 이것은 '어떻게 위치 적 논증을 사용합니까?'라는 질문에 대한 해결책을 의미합니다. 그래서 위의 예제에서. 'void process_file (char * filename)'은 파일을 열고 위에서 보여준 파일에 대한 모든 처리를하기 위해 작성하는 함수입니다. – Mobius

+0

@HanKuSung이 질문에 대한 답변이 있습니까? – Mobius