2012-07-25 73 views
-7

我試圖編寫一些代碼,只允許在argv [1]參數中輸入四個字母之一。如果它是另一個字母,字母q應該出現。C++只允許某些參數放置在argv [1]

所以香港專業教育學院的書面

#include <iostream> 
#include <cstdlib> 

char D, A , R, B; 

if(argv[1] != D||A||R||B) 
{ 
    cout << "Q" << endl; 
    return(0); 
} 

任何人都可以請幫我

+7

你有沒有考慮閱讀關於C或C++的入門書? – 2012-07-25 13:11:03

+4

你的代碼甚至沒有'main()'函數。如所建議的,首先閱讀一些介紹性資料。 – 2012-07-25 13:11:58

+0

這段代碼在如此多的層次上是錯誤的... – mihail 2012-07-25 14:09:37

回答

0

這是不可能在C++中。你必須

if (argv[1] != D && argv[1] != A && ...) 

,一般最好是檢查有多少個參數其實有(雖然argv[0]argv[1]始終存在)。

而且,你缺一main()功能,因此甚至沒有char *argv[]定義:

int main (int argc, char *argv[]) { 
... 
} 
+0

更不用說,你不能描述像這樣的全局範圍內的執行流程... – 2012-07-25 13:13:02

+0

@VladLazarenko:固定的。 – 2012-07-25 13:19:05

+0

Downvote for ...究竟是什麼?哦,是的,在互聯網上,沒有人知道你是一隻狗。 – 2012-07-25 13:26:22

2

if(argv[1] != D||A||R||B)

不正確的語法

DARB沒有已被初始化爲任何東西!他們就是你所說的變量。

也沒有main()功能。你在這裏錯過了很多,但我會回答如何檢查正確的char

你可能會得到更好的一個switch statement服務:

switch (*argv[1]) 
{ 
    case 'D': 
    case 'A': 
    case 'R': 
    case 'B': 
     cout << "Not Q" << endl; 
     break; 
    case 'Q': 
     cout << "We have a Q" << endl; 
     break; 
    default: 
     cout << "unknown char" << endl; 
     break; 
} 

還有很多其他的事情,我們可以進入這裏,比如如何正確地構建一個程序或者一般的C/C++的問題,但這應該至少讓你起步。

+0

但'argv [1]'不是字符 – 2012-07-25 13:17:03

+0

@ phresnel:對不起'* argv [1]'...甚至strcmp ..但這個問題還有很多它。 – 2012-07-25 13:18:08

+1

真正<需要更多字符> – 2012-07-25 13:20:20

0

第三種選擇是在C++ 11:

#include <set> 
#include <iostream> 

int main(int argc, char** argv) { 
    if (argc < 2) 
    return 1; 

    // here is the actual check: 
    if (std::set<char>{'D','A','R','B'}.insert(argv[1][0]).second) { 
    std::cout << "Q" << std::endl; 
    } else { 
    std::cout << "OK" << std::endl; 
    } 
    return 0; 
} 

這使用一組臨時保存所有的值和一個初始化列表把所需的值在設定。然後它試圖將insert傳入的值(即argv[1][0])插入到集合中,並檢查它是否成功插入元素(訪問second),那麼它不是它,因此是「錯誤的」。

請注意,我們不必檢查arvg[1][0],因爲每個陣列至少有一個元素位於位置0