2014-12-29 3 views
0

아이디어는 serial.read로 읽은 이름을 미리 만들어진 이름과 비교하는 코드를 작성하는 것이 었습니다.클래스 'char [9]'가 아닌 charArrayBuffer의 'compareTo'멤버에 대한 요청

두 선언 모두 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', '숯 [9]

답변

0

if (nameBuffer.compareTo(name1) < 0) 

교체

if (strcmp(nameBuffer, name1) != 0) 

nameBuffer. 연산자로 액세스 할 수 없습니다.

BTW, 오류 메시지에 따라, 당신은하지 C.

+0

죄송 비교를 위해, 나는 C++를 포함하는 문자열 비교 가이드를 발견했습니다 수도 있지만, 나는 언어 c를 입력 할 배우는 중이에요. 그래서. 연산자는 C++의 도구입니까 ?? strncmp 0 <(nameBuffer을 nameBuffer를 sizeof, NAME1) : 내가 있도록 nameBuffer SIZEOF 인수를 추가하는 경우 (STRCMP (nameBuffer, NAME1가) <0) 환호를 완벽하게 – Ivan

0

대신

nameBuffer.compareTo(name1) < 0 

당신의 변수의

strncmp(nameBuffer, name1, sizeof nameBuffer) < 0 

을 시도, C++에서이 char 배열되어 프로그래밍하고 아니 class 그래서 그들은 방법이 없습니다. 내가 nameBuffername1가 제대로되어 종료 널 (null), 그래서 당신은 C++를 사용하고 있기 때문에 그들이

를하지 않았다 경우이 방법은 당신이 어떤 문제를 방지 있는지 확인 캔트 때문에 내가 strncmp를 사용

, 당신은 대신 std::string를 사용하여 시도 할 수 있습니다 그런 식으로부터 당신은 늘 다음 char의 당신이 할 수있는 단지

,536를 추가하면

std::string nameBuffer; 
std::string name1("Jasper"); 

를 선언하는 경우 문자열의 길이에 대해 걱정할 필요가

nameBuferr += static_cast<char>(inByte); 

하고 그것에 대해 단지

if (nameBuffer < name1) 
+0

을 너무 완벽하게 일했다 나는 다음과 같은 오류가 발생한다 : int strcmp (const char *, const char *) – Ivan

+0

을 일했다면 당신의 대답은 감사 – Ivan

+0

'strcmp'는'\\ '로 끝나는 두 개의 문자열만을 취하므로 구문이 잘못되어' str' 그것은'strncmp' <-'str {n} cmp'입니다. –