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

时间:2017-04-25 07:17:34

标签: c++ if-statement string-comparison

我最近一直在学习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”消息。

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

4 个答案:

答案 0 :(得分:5)

将字符串与strcmp进行比较,而不与==进行比较:

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

答案 1 :(得分:4)

您必须使用string.h来比较strcmp(s1, s2)库中的c样式字符串。

如果字符串0s1相等,则s2函数返回1 s1 s2-1如果s1s2按字母顺序排列,则不按字母顺序排列#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; }

以下是代码:

{{1}}

答案 2 :(得分:3)

这不是比较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
}

答案 3 :(得分:3)

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

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

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