带有 OR 运算符的 C++ if 语句无法正常工作

C++ if statement with OR operator not working as I expect

最近在学习C++,为了不让自己放学后无聊,开始了一个小项目

我正在创建一个接受命令参数并在格式不正确时抛出 "USAGE" 消息的程序。

这是我的代码:

#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;
}

但出于某种原因,无论我输入什么都会抛出一条 "USAGE" 消息。

如果有人能告诉我我做错了什么,那就太棒了!

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

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

这不是比较 char* 的方式。使用 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 风格字符串。

函数strcmp(s1, s2) returns 0如果字符串s1s2相等,1如果s1如果 s1s2 按字母顺序排列,则 s2-1 不按字母顺序排列。

代码如下:

#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;
}

您正在尝试将 C 风格的字符串与 == 运算符进行比较。这不会像您在 C++ 中期望的那样工作。

相反,您需要使用函数 strcmpequal 来比较两个任意序列。

您也可以将 c 字符串转换为 std::string 然后比较它们。