2012-07-25 40 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