#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, allocator >')到 'bool' 转换为二进制操作数无效
表达式 ('bool' 和 'std::__1::string' (又名 'basic_string, 分配器 >'))
你好,我正在传递命令行参数,例如“1 allemptyfile”和“1topemptyfile”,这里我想测试第二个参数是否不是all或top以打印出“INVALID MODE”。我无法理解为什么我不能使用 s||t。我收到上面发布的错误,是否有解决此问题的方法
感谢这个网站,我得到了帮助,但我还有另一个问题,如果我有 top 或 all 作为第二个参数,我希望它不打印出“无效模式”。但它似乎仍然打印输出“无效模式”,在这种情况下,所有都是第二个参数,但当 top 是第二个参数时似乎不会打印。
再次非常感谢,我遇到的另一件事是,当没有传递参数时如何打印出“NO PHRASE LENGTH”?如何测试这一点?
另外,我如何测试第一个参数是否是整数?如果它不是整数并且是负数,则打印出“无效的短语长度”
你的表情argv[2] != s || t
is grouped as (argv[2] != s) || t
,左手论证||
那么是一个bool
类型,这是一个问题,因为没有重载||
运算符为std::string
这需要一个bool
。这解释了神秘的编译器消息。
这里的解决方案是写
argv[2] != s && argv[2] != t
反而。请注意,我已经切换了||
for &&
否则条件检查总是true
你的程序会always output "INVALID MODE"
!有些语言按照你现有的方式工作;有些语言则按照你现有的方式工作。 C++ 没有。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)