对不起,我不能说这个话题特别好。 很简单,我有一个IF语句,我在比较是否满足三个条件;
if(buffer[i] == "N" && (buffer[i+1] == "1"||"2"||"3"||"4"||"5") && buffer[i+2] == " ")
我知道N总是存在,之后的字符需要是1到5之间的数字,之后就是空格。这确实编译但没有产生任何结果,安全猜测我会说这是我上面可怕的代码。
我应该补充一下,这是在while循环中,它通过缓冲区前进,直到空格结束。
我是否过度复杂化了一个简单的问题,或者我是否在正确的轨道上,但语法蹩脚?
感谢您提出任何建议或提示。
答案 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.