命令行参数,cant 或两个变量

command line argument, cant or two variables

本文关键字:两个 变量 参数 cant 命令行      更新时间:2023-10-16
#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"(又名"basic_string,分配器>"(到"布尔"无效操作数到二进制的可行转换

表达式('bool' 和 'std::__1::string' (又名 'basic_string, 分配器>'((

您好,我正在传递命令行参数,例如"1 所有空文件"和"1 顶部空文件",在这里我想测试第二个参数是否不是全部或顶部以打印出"无效模式"。 我无法理解为什么我不能使用 s||我收到上面发布的错误,无论如何都有这个

多亏了这个网站,我得到了帮助,但我还有另一个问题,如果我有 top 或 all 作为第二个参数,我希望它不要打印出"无效模式"。 但它似乎仍然是打印输出"无效模式",在这种情况下,所有都是第二个参数,但当 top 是第二个参数时似乎没有打印。

再次非常感谢,我遇到问题的另一件事是,在没有通过参数的情况下如何打印出"没有短语长度"? 如何测试。

另外我如何测试第一个参数是否是整数?,所以如果它不是整数并且是负数,请打印出"无效的短语长度">

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

这里的解决方案是写

argv[2] != s && argv[2] != t

相反。请注意,我已经切换了||&&否则条件检查总是true,你的程序将总是输出"INVALID MODE"!有些语言的工作方式与您一样;C++没有。

你必须像这样测试

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

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