2017-10-02 4 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

申し訳ありませんが、機能とはどういう意味か分かりません。私の学校はjavaを使用していますが、C++を使った別の学校のこのコースが必要です。私はその言語にはあまり慣れていないので、教師はこれらのコマンドフラグについて説明しなかったし、私は馬鹿のように聞こえると申し訳ないですが、私は本当にこれでウィットの終わりです。 – HanKuSung

+0

@HanKuSungこれは、「どのようにポジション引数を使用するのか」という問題の解決策として意味されています。上記の例ではそうです。 'void process_file(char * filename)'はファイルをオープンするための関数であり、上に示したファイルに対するすべての処理を行います。 – Mobius

+0

@HanKuSungこれはあなたの質問に答えますか? – Mobius

関連する問題