命令行参数,不能或两个变量

时间:2018-09-20 11:44:55

标签: c++

#include <fstream>
#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char* argv[])
{

    string s = "all";
    string t = "top";
    for (int i=1; i<argc ; i++)
    {
        cout<< argv[i]<< endl;
        if( argv[2] != s || t)
        {
            cout<<"INVALID MODE"<< endl;
            return -1;
        }
    }
}
  

从'std :: __ 1 :: string'(aka'basic_string,allocator>')到'bool'的无效转换无效的操作数到二进制

     

表达式(“ bool”和“ std :: __ 1 :: string”(又称“ basic_string,分配器>”))

您好,我正在传递命令行参数,例如“ 1 all emptyfile”和“ 1 top emptyfile”,在这里我想测试第二个参数是否不是全部或顶部以打印出“ INVALID MODE”。我无法理解为什么我不能使用s || t。我得到了我上面发布的错误,是否仍然存在

感谢本网站,我得到了

的帮助,但是我还有另一个问题,如果我以第二个参数为最高或全部,我希望它不要打印出“ INVALID MODE”。但是它似乎仍然是打印输出的“无效模式”,在这种情况下,所有参数都是第二个参数,但是当top是第二个参数时,似乎没有打印出来。

再次非常感谢,我遇到的另一件事是,当不传递任何参数时,如何打印出“ NO PHRASE LENGTH”?一个如何测试。

还要如何测试第一个参数是否为整数?因此,如果它不是整数且为负数,则打印出“无效短语长度”

2 个答案:

答案 0 :(得分:4)

您的表达式<meta charset="utf-8"> 分组argv[2] != s || t,则(argv[2] != s) || t的左手参数为||类型,这是一个问题,因为对于bool,没有||的重载std::string运算符。解释了神秘的编译器消息。

这里的解决方案是写

bool

相反。请注意,我已将argv[2] != s && argv[2] != t 切换为||,否则条件检查始终为&&,并且您的程序将始终输出true!有些语言按照您的方式工作。 C ++没有。

答案 1 :(得分:1)

您必须像这样测试

if( (argv[2] != s) && (argv[2] != t))

某些脚本语言允许您像在问题中所做的那样进行比较。 PERL是一种这样的语言。