一个阵列位置的多个OR比较

时间:2011-03-17 15:38:46

标签: c loops if-statement

对不起,我不能说这个话题特别好。 很简单,我有一个IF语句,我在比较是否满足三个条件;

if(buffer[i] == "N" && (buffer[i+1] == "1"||"2"||"3"||"4"||"5") && buffer[i+2] == " ")

我知道N总是存在,之后的字符需要是1到5之间的数字,之后就是空格。这确实编译但没有产生任何结果,安全猜测我会说这是我上面可怕的代码。

我应该补充一下,这是在while循环中,它通过缓冲区前进,直到空格结束。

我是否过度复杂化了一个简单的问题,或者我是否在正确的轨道上,但语法蹩脚?

感谢您提出任何建议或提示。

5 个答案:

答案 0 :(得分:2)

你不能问

buffer [i + 1] ==“1”||“2”

你必须要求

buffer [i + 1] ==“1”|| buffer [i + 1] ==“2”

但如果这些是C字符串,那么你根本不能使用== - 你必须使用标准库中的strcmp()函数,当两个字符串相等时返回0:

strcmp(buffer [i + 1],“1”)== 0 || strcmp(buffer [i + 1],“2”)== 0

答案 1 :(得分:1)

第一个比较应该是buffer[i] == 'N',而不是buffer[i] == "N",因为你想要比较字符,而“N”是指向char的指针,而不是char。

出于同样的原因,第二次比较应为buffer[i+1] >= '1' && buffer[i+1] <='5'

答案 2 :(得分:1)

以下两个表达式是等效的。你是||错误的东西。

  • (buffer[i+1] == "1"||"2"||"3"||"4"||"5")
  • (((((buffer[i+1] == "1")||"2")||"3")||"4")||"5")

你想要达到的目标是。

  • (buffer[i+1] >= '1' && buffer[i+1] <= '5')

另外,我认为您的代码无法编译,因为单个字符串元素属于char类型。他们的文字用'1''2''N'等表示。

答案 3 :(得分:1)

或者不这样做,也不会在C中进行字符串比较。首先,您可能想要与char进行比较。

其次,a == b||c||d||e相当于a == (b||c||d||e),可能最终为1。

你想说的是(天真地)(buffer[i+1] == '1') || (buffer[i+1] == '2') || (buffer[i+1] == '3') ...

由于您使用的是ASCII字符,因此更简单的说法是:

(buffer[i+1] >= '1') && (buffer[i+1] <= '5')

不要忘记分别用"N"" "替换'N'' '

答案 4 :(得分:0)

我想我会使用sscanf:

char digit[2];

if (1==sscanf(buffer+i, "N%[12345][ ]", &digit))
    // It matched. `digit` holds the digit we found in string form.