从命令行正确收集数据

时间:2015-07-30 00:47:28

标签: c++ loops command-line

我试图在终端上制作我自己的wc版本(字数) 用户需要能够声明他们是否想知道文件中的行数,字符数或单词数。它会像这样输入:

mywc -l -w -c

mywc -l -c(也可以)

mywc(必须全部计算)

然而,我如何制作一个循环(或我需要做的任何事情),只在必要时进行计算。

我能够提出的唯一想法是循环** argv并查看我是否可以找到-l -w或-c然后再执行if语句。

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char **argv)
{   
    for(int i = 1; i < argc; i++)
    {
        string l = "-l";
        string w = "-w";
        string c = "-c";

        if(argv[i] == l)cout <<"detected -l" << endl;
        else if(argv[i] == w)cout <<"detected -w" << endl;
        else if(argv[i] == c)cout <<"detected -c" << endl;
        else  
            cout <<"Must calculate all" << endl;
            break;
    }
    return(0);

我的问题是,一旦发现其中一个字符串打破了循环,我就不知道为什么。

2 个答案:

答案 0 :(得分:3)

这是因为“break”没有包含在“else”语句中。

这就是为什么在任何if / else / while结构中使用括号总是一个好主意;很容易在视觉上错过这样的错误。

编辑:即使使用括号修复,您的代码也不会按照您的描述运行。 使用括号修复,您的代码将解释任何意外的参数,意味着“必须全部计算”。如果您希望“无参数”表示“必须全部计算”,则应添加if语句以检查for循环之外是否argc == 1

答案 1 :(得分:0)

我猜你也在使用python进行编码(或者你只是忘记括号),你写过:

else
  cout <<"Must calculate all" << endl;
  break;

相当于:

else
{
  cout <<"Must calculate all" << endl;
}
break;

在C ++中 断点总是在循环的每次迭代中执行(因此它只执行一次) 你想要的是:

else
{
  cout <<"Must calculate all" << endl;
  break;
}

(另外,您忘记在}之后复制一个return 0;