c++只允许在argv[1]中放置某些参数
c++ only allow certain parameters to placed in argv[1]
我试图编写一些代码,只允许在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)
不是正确的语法
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++问题,但这至少应该让你开始。
这在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
。
相关文章:
- 在VS2013中使用devenv (C++)传递命令行参数argv
- 作为参数的'char *args[]'和'char **argv'之间的差异
- 静态变量需要在MAIN处理ARGV参数之前进行初始化
- 函数main中的参数argv(int argc,char *argv [])
- 如何在 GUI 程序 C++ 而不是控制台中传递 argv 参数
- 在 Argv 主参数中传递常量字符
- argc C++中的argv参数(游戏编程)
- argv[] 未注册参数
- 比较终端中通过char *argv []的参数
- C++ argv 参数不从命令行解析 *
- 如何在 Visual Studio 2015 调试中将'%'符号作为命令行参数 (argv) 传递?
- c++只允许在argv[1]中放置某些参数
- C++ 默认 argv(如果未在控制台中解析任何参数)
- int main(int argc,char* argv[]) 为什么 argc 给出 2 个参数
- 你能定义 main() 来接受不仅仅是 argc/argv 参数吗?
- 内存分配和**argv参数
- argv参数出现int main()问题
- 更改命令行参数argv
- 命令行参数:argv
- 为什么main()参数argv的类型是char*[]而不是const char*[] ?