如果(indata [0] ==' 10')不起作用

时间:2014-06-12 02:14:00

标签: c++ if-statement char arduino

我已经研究了一些arduino代码几天了,我遇到了这个问题。我需要检查inData是否等于最多150的数字,但当我进入双位和三位数时它会停止工作。这是我正在使用的代码。它需要设置键盘的数字输入,以便将其数字发送到arduino的串行RX引脚。

把它放在这里太长了所以我把它放在pastebin here上。

char inData[20]; // Allocate some space for the string
if (inData[0] == '10') {
// Code snipped for brevity
}

3 个答案:

答案 0 :(得分:1)

假设inData,一个char数组,是一个C风格的'\0'终止字符串。那么你应该做的是调用strcmp()而不是只比较1 st 字符。

#include <cstring>

if (std::strcmp(inData, "1") == 0) {
}
else if (std::strcmp(inData, "2") == 0) {
}
//...
else if (std::strcmp(inData, "10") == 0) {
}

请注意''引用的字符文字与""引用的字符串文字之间的区别。

答案 1 :(得分:0)

我看到了几个问题。

首先,对if..then..else个语句使用if..then构造或开关。

并且,当您对char 10进行比较时,有两个char值,所以简单= =赢了。

您可以先使用atoi将其转换为整数,然后进行比较,或者您可以查看if (inData[0] == '1' && inData[1] == '0')可以执行的操作。

<强>更新

我会确保首先将inData的每个部分设置为零,而不是&#39; 0&#39;。

然后使用开关,例如:

switch(inData[0]) {
  case '1':
    switch(inData[1]) {
       case 0:
         // This would be '1'
         break;
       case '0':
         // This will be 10
         break;
    }
    break;
  case '2':
     break;
}

我还没有测试过这段代码,只是作为一个例子。

答案 2 :(得分:0)

如果这是C ++,你应该使用std::string

std::string inData; // Allocate some space for the string

// Replace this:
// inData[index] = c;
// index++;
// inData[index] = '\0';   

// with
inData += c;

if (inData == "10") {   // Test for a specific string.