2017-10-02 17 views
-1

Faire une affectation de projet et je n'arrive pas à faire fonctionner mon drapeau de commande. Été à la recherche d'aide en ligne mais ne peut pas trouver beaucoup sur ce sujet. Mon professeur n'a jamais expliqué ce que c'est ou comment le faire alors je fais juste des choses en fonction de ce que j'ai trouvé en ligne. Toute solution ou explication serait grandement appréciée.Avoir du mal à activer mon drapeau de commande dans mon programme 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

* Toute solution ou explication ... * pour quoi faire? – CroCo

+0

Je n'arrive pas à faire fonctionner mon drapeau de commande et j'espère que quelqu'un pourra expliquer pourquoi cela ne fonctionne pas. – HanKuSung

+0

Bienvenue sur Stack Overflow! Il est difficile d'offrir des solutions lorsque l'énoncé du problème est simplement «ça ne marche pas». S'il vous plaît [modifier] votre question pour donner une description plus complète de ce que vous attendiez et comment cela diffère des résultats réels. Voir [demander] pour des conseils sur ce qui fait une bonne explication. –

Répondre

0

Il me semble que vous essayez d'exécuter la même fonctionnalité contre chaque élément de la ligne de commande.

Je vous recommande vivement de scinder votre fonctionnalité actuelle en une fonction distincte (process_file), vous pouvez ensuite parcourir les arguments et exécuter vos fonctionnalités.

NOTE: nous partons de argv[1] parce argv[0] est tout ce que l'utilisateur a tapé sur la ligne de commande pour obtenir votre programme. Ceci est généralement quelque chose comme ./my-program en supposant que l'utilisateur a tapé ./my-program file1.txt file2.txt

L'exemple ci-dessous va exécuter votre fonctionnalité sur chaque fichier.

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

Désolé, je ne comprends pas ce que cela veut dire, que voulez-vous dire par fonctionnalité? Mon école utilise java mais nous avons besoin de ce cours d'une autre école qui utilise C++ donc je ne suis pas très familier avec la langue et mon professeur n'a pas expliqué ces drapeaux de commande ou les a même mentionné en classe. Je suis désolé si je ressemble à un idiot, mais je suis vraiment à la fin avec cela. – HanKuSung

+0

@HanKuSung Ceci est la solution à la question de savoir comment utiliser les arguments positionnels. donc dans l'exemple ci-dessus. 'void process_file (char * filename)' serait une fonction que vous écrivez pour ouvrir le fichier et faire tout le traitement sur ce fichier que vous montrez ci-dessus. – Mobius

+0

@HanKuSung Cela répond à votre question? – Mobius