2017-04-25 60 views
0

我最近学习C++,并且我开始了一个小项目,以便我放学后不会觉得无聊。C++ if语句与OR操作符不工作,因为我期望

我正在创建一个程序,它接受命令参数,如果格式不正确,会抛出“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; 
} 

但出于某种原因,不管我键入抛出了一个“用法”消息。

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

+1

你究竟输入什么?你可以请添加该信息的问题? –

+2

我想知道为什么所有的降价...这是一个非常基本的问题,但它非常清楚,任何不是C++新手的人都应该能够立即回答。然而,当你*是一个C++新手时,这不是一件容易研究的事情(除了“学习语言”,这是OP已经在做的事情),甚至意识到什么是错误的。 – hyde

+0

我标记你的答案是正确的。谢谢你解释它。我认为'strcmp(1,2)'只是一个'C'的东西。 –

回答

4

你将不得不使用strcmp到C风格的字符串从string.h库进行比较。

功能strcmp(s1, s2)返回0如果字符串s1s2是相等的,如果1s1s2不按字母顺序排列和-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; 
} 
+0

评论,因为这是被接受的答案,并有一些upvotes:虽然这是一个可能的解决方案,真的不需要使用'strcmp',它不是很好的C++。 'std :: string arg1(argv [1]);',然后使用正常的C++字符串处理会更好。 – hyde

+0

@hyde你是完全正确的先生。请也请提出我现在应该做什么? –

+0

你不需要做任何事情,因为[这个答案](http://stackoverflow.com/a/43604180/1717300)已经覆盖了'std :: string'的选择。 – hyde

5

字符串与strcmp相比,而不是与==

if (!strcmp(argv[1], "-c")) ... 
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

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

取而代之,您需要使用功能strcmpequal,它比较两个任意序列。

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