-8

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

所以我写了

#include <iostream>
#include <cstdlib>

char D, A , R, B;

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

谁能帮帮我吗

4

3 回答 3

2

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

语法不正确

D, A, R, 并且B没有被初始化为任何东西!它们就是你所说的变量。

你也没有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++ 问题,但这至少应该让您入门。

于 2012-07-25T13:12:47.290 回答
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]因为每个数组至少有一个元素位于 position 0

于 2012-07-25T13:28:59.393 回答
0

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

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

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

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

int main (int argc, char *argv[]) {
 ...
}
于 2012-07-25T13:11:08.683 回答