这个想法是创建一个代码,将用serial.read读取的名称与预制的名称进行比较。
这两个声明都是char数组,长度为9,因此我不明白为什么会出现这个问题。
代码:
char name1[9] = "Jesper";
char nameBuffer[9];
void setup()
{
Serial.begin(9600);
}
void loop()
{
int i = 0;
nameBuffer[0] = 0;
while(Serial.available() == 0)
{
// wait for data to be send
}
while(Serial.available() > 0)
{
int inByte = Serial.read();
delay(50);
nameBuffer[i] = char(inByte);
i++;
}
Serial.print("Searching for: ");
Serial.println(nameBuffer);
if (nameBuffer.compareTo(name1) < 0 )
{
Serial.println("Did you mean to write: \"Jesper\"");
}
else
{
Serial.println("Jesper found");
}
}
收到错误:
错误:请求'nameBuffer‘中的成员'compareTo’,该成员是非类类型'char9‘
发布于 2014-12-29 20:59:13
替换
if (nameBuffer.compareTo(name1) < 0 )
使用
if (strcmp(nameBuffer, name1) != 0 )
无法使用.
运算符访问as nameBuffer
。
顺便说一句,根据错误信息,你正在用C++编程,而不是用C。
发布于 2014-12-29 20:59:16
试一试
strncmp(nameBuffer, name1, sizeof nameBuffer) < 0
而不是
nameBuffer.compareTo(name1) < 0
你的变量是char
数组,而不是class
E,所以它们没有方法。
我使用strncmp
是因为我不能确定nameBuffer
和name1
是否正确地以null结尾,所以通过这种方式可以防止出现一些问题
既然您使用的是c++,那么您也可以尝试使用std::string
,因为如果您声明了
std::string nameBuffer;
std::string name1("Jasper");
然后,要附加char
,您可以执行以下操作
nameBuferr += static_cast<char>(inByte);
为了进行比较,只需
if (nameBuffer < name1)
https://stackoverflow.com/questions/27689345
复制相似问题