我试图在终端上制作我自己的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);
我的问题是,一旦发现其中一个字符串打破了循环,我就不知道为什么。
答案 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;