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

c++ only allow certain parameters to placed in argv[1]

本文关键字:参数 argv c++      更新时间:2023-10-16

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

所以我写了

#include <iostream>
#include <cstdlib>
char D, A , R, B;
if(argv[1] != D||A||R||B)
{
  cout << "Q" << endl;
  return(0);
}

有人能帮我吗

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++问题,但这至少应该让你开始。

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

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

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

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

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

第三个选项将在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;
}

这使用一个保存所有值的临时集合和一个初始化列表来将所需值放入集合中。然后,它尝试将传递的值(即argv[1][0]insert放入集合中,并检查它是否成功插入元素(访问second),那么它不是,因此是"错误的"。

注意,我们不必检查arvg[1][0],因为每个数组都至少有一个元素位于位置0