c ++只允许将某些参数放在argv [1]中

时间:2012-07-25 13:09:01

标签: c++ argv argc

我试着编写一些代码,只允许在argv [1]参数中输入四个字母中的一个。如果是另一个字符,字母q应该出现。

所以我写了

#include <iostream>
#include <cstdlib>

char D, A , R, B;

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

任何人都可以帮助我

3 个答案:

答案 0 :(得分: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 ++问题,但这应该至少让你开始。

答案 1 :(得分:0)

这在C ++中是不可能的。你必须

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

通常最好检查实际有多少参数(尽管argv[0]argv[1]始终存在)。

此外,您缺少main()功能,因此甚至没有定义char *argv[]

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

答案 2 :(得分: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位置。