2017-04-25 57 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然後進行比較。