1

我有一个包含字符串的用户输入数据的字符串向量。现在我需要确保如果字符串与指定的几个不同,程序不会执行。向量包含 4 个字段,每个字段都有不同的条件:

  • vector[0] 只能是“1”或“0”
  • vector[1] 只能是“红色”或“绿色”
  • vector[2] 只能是“1”、“2”或“3”
  • vector[3] 只能是“1”或“0”

我尝试为每种情况编写 if:

if(tokens[0]!="1" || tokens[0]!="0"){
    decy = "error";
}
else if(tokens[1]!="red" || tokens[1]!="green"){
    decy = "error";
}
else if(tokens[2]!="1" || tokens[2]!="2" || tokens[2]!="3"){
    decy = "error";
}
else if(tokens[3]!="1" || tokens[3]!="0"){
    decy = "error";
}
else{
switch(){} //working code
}
return decy;

它总是先进入 if 并返回错误。我尝试使用if而不是else if但它也不起作用。我检查了vector[i]内容,它返回了正确的字符串。没有“”在它的末尾等。删除else并释放开关只会使程序检查第一个条件并忽略其余部分。

我可能做错了什么,但我在互联网上找不到答案,所以我决定在这里问。

4

4 回答 4

3

这一行:

if(tokens[0]!="1" || tokens[0]!="0")

应该:

if(tokens[0]!="1" && tokens[0]!="0")
                  ^^

其余的if语句也是如此。

于 2013-05-08T16:07:25.623 回答
2

你应该把它们||变成&&. 如果输入只能是Xor Y,这意味着当它不是X not时它是非法的Y

if (tokens[0] != "1" && tokens [0] !="0")
//                   ^^
于 2013-05-08T16:07:16.050 回答
2

条件无效。

任何不同的值都可以满足您的条件。

您应该使用&&而不是||.

例如:

if (tokens[0] != "1" || tokens[0] != "0") {

考虑这条线。如果tokens[0]is"1"是有效输入,它不会满足第一个条件,但会满足第二个条件。当值不是有效的可能输入时,您只想抛出错误。

这意味着您的情况应该是:

if (tokens[0] != "1" && tokens[0] != "0") {

所有其他人也是如此。

于 2013-05-08T16:07:47.340 回答
0

第一个如果:

if(tokens[0]!="1" || tokens[0]!="0")

总是评估为true.

于 2013-05-08T16:13:56.133 回答