我试着编写一些代码,只允许在argv [1]参数中输入四个字母中的一个。如果是另一个字符,字母q应该出现。
所以我写了
#include <iostream>
#include <cstdlib>
char D, A , R, B;
if(argv[1] != D||A||R||B)
{
cout << "Q" << endl;
return(0);
}
任何人都可以帮助我
答案 0 :(得分: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 ++问题,但这应该至少让你开始。
答案 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
位置。