C++;带有OR运算符的if语句未按预期工作 最近我学习C++,我已经开始了一个小项目,这样我就不会在放学后感到无聊了。

C++;带有OR运算符的if语句未按预期工作 最近我学习C++,我已经开始了一个小项目,这样我就不会在放学后感到无聊了。,c++,if-statement,string-comparison,C++,If Statement,String Comparison,我正在创建一个程序,它接受命令参数,如果格式不正确,就会抛出一条“用法”消息 这是我的密码: #include <iostream> using namespace std; int main(int argc, char *argv[]){ if ( argc != 3 ) { cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>

我正在创建一个程序,它接受命令参数,如果格式不正确,就会抛出一条“用法”消息

这是我的密码:

#include <iostream>
using namespace std;

int main(int argc, char *argv[]){
    if ( argc != 3 )
    {
        cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl;
        return 1;
    }
    else
    {
        if ( argv[1] == "-f" || argv[1] == "-F" )
        {

        }
        else if ( argv[1] == "-c" || argv[1] == "-C" )
        {

        }
        else
        {
            cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl;
            return 1;
        }
    }
    return 0;
}
#包括
使用名称空间std;
int main(int argc,char*argv[]){
如果(argc!=3)
{

cout字符串与strcmp比较,而不是与
=
比较:

if ( !strcmp( argv[1], "-c" ) ) ...

这不是比较char*
s的方法。使用strcmp或创建一个新的
std::string
如下:

std::string argument(argv[1]);
if ( argument == "-f" || argument == "-F" )
{
    //some code here
}
else if ( argument == "-c" || argument == "-C" )
{
    //some code here
}

您必须使用
strcmp
来比较
string.h
库中的c样式字符串

如果字符串
s1
s2
相等,则函数
strcmp(s1,s2)
返回
0
1
如果
s1
s2
不按字母顺序,如果
s1
s2
按字母顺序

代码如下:

#include <iostream>
#include <string.h>
using namespace std;

int main(int argc, char *argv[])
{
    if ( argc != 3 )
    {
        cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl;
        return 1;
    }
    else
    {
        if ( strcmp(argv[1], "-f") == 0 || strcmp(argv[1], "-F") == 0 )
        {

        }
        else if ( strcmp(argv[1], "-c") == 0 || strcmp(argv[1], "-C") == 0 )
        {

        }
        else
        {
            cout << "USAGE: " << argv[0] << " <-f/-c> <integer value>" << endl;
            return 1;
        }
    }
    return 0;
}
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
如果(argc!=3)
{

CUT

您试图将C风格字符串与==/Cuth>运算符进行比较。这在C++中是不适用的。

相反,您需要使用比较两个任意序列的函数
strcmp
equal


也可以把C字符串转换成<代码> STD::String ,然后比较它们。

你到底是怎么打出的????你能把那个信息添加到这个问题吗??我想知道为什么所有的下注……这是一个非常基本的问题,但是它是完全清楚的,任何不是C++新手的人都应该能够立即回答它。但是它是不是一个容易研究的东西(除了学习语言,这是OP已经做的),甚至是意识到错误,当你是C++新手时,我把你的答案标记为正确的。谢谢你解释它。我想<代码> STRCMP(1, 2)是一个<代码> C++ <代码>,但C++中还有C字符串,但是你最好总是使用<代码> STD::String 。评论是因为这是一个接受的答案并且有几个投票:虽然这是一个可能的解决方案,但是实际上不需要使用<代码> STRCMP < /C> >,它不是好的C++。,然后使用普通的C++字符串处理会更好。@海德,你是完全正确的,先生。请同时建议我现在该怎么办?你不必做任何事情,因为已经覆盖了<代码> STD::String < /Cord>备选。