【问题标题】:Having a hard time activating my command flag in my c++ program很难在我的 C++ 程序中激活我的命令标志
【发布时间】:2017-10-02 11:18:22
【问题描述】:

做一个项目分配,我似乎无法让我的命令标志工作。一直在网上寻求帮助,但在这个问题上找不到太多。我的老师从来没有解释过这是什么或怎么做,所以我只是根据我在网上找到的东西做事。任何解决方案或解释将不胜感激。

#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;
}

【问题讨论】:

  • 任何解决方案或解释...什么?
  • 我无法让我的命令标志工作,我希望有人能解释为什么它不工作。
  • 欢迎来到 Stack Overflow!当问题陈述只是“它不起作用”时,很难提供解决方案。请edit您的问题更完整地描述您预期会发生什么以及这与实际结果有何不同。请参阅 How to Ask 以获取有关什么是好的解释的提示。

标签: c++ command-line-arguments flags


【解决方案1】:

在我看来,您正在尝试对命令行上的每个项目运行相同的功能。

我强烈建议将您的实际功能拆分为一个单独的函数 (process_file),然后您可以遍历参数并运行您的功能。

注意:我们从argv[1] 开始,因为argv[0] 是用户在命令行上键入以获取您的程序的任何内容。这通常类似于./my-program,假设用户输入了./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]);
    }
}

【讨论】:

  • 对不起,我不明白这意味着什么,就像你所说的功能是什么?我的学校使用 java,但我们需要另一所使用 c++ 的学校的这门课程,所以我对这门语言非常不熟悉,我的老师没有解释这些命令标志,甚至在课堂上根本没有提到它们。如果我听起来像个白痴,我很抱歉,但我真的对此束手无策。
  • @HanKuSung 这是how do i use positional arguments问题的解决方案。所以在上面的例子中。 void process_file(char * filename) 将是您编写的用于打开文件并对上面显示的文件进行所有处理的函数。
  • @HanKuSung 这能回答你的问题吗?
  • 抱歉回复晚了,是的,我想是的。我无法按时交作业,但我想我可以正确完成下一个作业。谢谢。
猜你喜欢
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多