Идея состояла в том, чтобы создать код для сравнения прочитанного имени с serial.read с предварительно созданным именем.
Оба объявления являются массивами символов длины [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");
}
}
Ошибка получена:
ошибка: запрос на член ‘CompareTo’ в ‘nameBuffer’, который имеет неклассовый тип ‘char [9]’
замещать
if (nameBuffer.compareTo(name1) < 0 )
с
if (strcmp(nameBuffer, name1) != 0 )
как nameBuffer
не могут быть доступны с .
оператор.
Кстати, согласно сообщению об ошибке, вы программируете на C ++, а не на C.
Пытаться
strncmp(nameBuffer, name1, sizeof nameBuffer) < 0
вместо
nameBuffer.compareTo(name1) < 0
ваши переменные char
Массивы не являются class
У них нет методов.
я использую strncmp
потому что я не могу быть уверен, что nameBuffer
а также name1
правильно обнуляются, поэтому таким образом вы можете избежать некоторых проблем, если они не были
Поскольку вы используете c ++, вы также можете попробовать использовать std::string
вместо этого, так как вам не нужно беспокоиться о длине строк, если вы объявите
std::string nameBuffer;
std::string name1("Jasper");
затем добавить char
ты можешь просто
nameBuferr += static_cast<char>(inByte);
и сделать сравнение просто
if (nameBuffer < name1)