2011-12-28 4 views
0

저는 아이폰 앱의 사용자 텍스트 입력을 내가 선언 한 정적 배열의 텍스트와 비교하려고합니다. 텍스트가 다른 경우에도 항상 "true"를 반환합니다. strncmp를 수행 한 후에 두 텍스트 필드를 모두 표시합니다. 인간의 눈에는 필드가있을 것으로 예상됩니다. 화면으로 돌아가는 debugmsg는 내가 기대하는 값을 보여 주지만, 비교는 항상 사실입니다. 모든 제안을 부탁드립니다. 감사. (당신이 CString을 사용하는 이유는 무엇입니까?)왜 strcmp가 항상 true를 반환합니까?

if (strncmp(SymbolEntered.text, 
[NSString stringWithCString:elements_table2[idx].element_symbol],2)==0) 
{ 
    DebugMsg.text = [NSString stringWithCString:"Correct answer"]; 
} 
else 
{ 
    DebugMsg.text = [NSString stringWithCString:"Incorrect!"]; 
} 

DebugMsg2.text = SymbolEntered.text; 
DebugMsg3.text = [NSString stringWithCString:elements_table2[idx].element_symbol]; 
+0

당신은 예를 제공 할 수 있습니까? 당신은 단 하나의 캐릭터 만 비교하고 있습니다, 당신이 원하는 것입니까? –

+0

strncmp가 NSString을 원하지 않는다고 확신합니다. – JustSid

답변

7

당신은 정말 구현 비교 방법의 톤을 가지고있는, NSString이 작업을 수행하는 대신 CString한다. strcmpNSString과 작동하지 않습니다.

if([SymbolEntered.text isEqualToString:[NSString stringWithCString:elements_table2[idx].element_symbol]]) { 
    DebugMsg.text = @"Correct answer"; 
} else { 
    DebugMsg.text = @"Incorrect answer"; 
} 

또한 대신은 :

DebugMsg.text = [NSString stringWithCString:"Correct answer"]; 

당신은이 작업을 수행 할 수 있습니다

DebugMsg.text = @"Correct answer"; 
+0

단지 CString을 무지로 사용합니다. 이전에 문자열에 문제가 있었고이 사이트의 누군가가 CString을 제안했으며 stnncmp에서 다시 사용하기 위해 (텍스트 필드에 정적 데이터를 저장하는) 당시에 내가했던 일을 처리했습니다. @ 제안 주셔서 감사합니다. 따옴표로 묶인 문자열을 시도했지만 작동하지 않았습니다. 나는 아직 @ 기호에 익숙하지 않다! – Rick

+0

문제는 객체 지향 개념을 다루는 방법을 이해하지 못한다는 것입니다. 이것이 NSString으로 해결 된 다른 문제가 없었던 이유 일 것입니다. NSString은 char *보다 훨씬 강력합니다. 따라서 IC 에서처럼 메모리가 제한되어 있지 않다면 NSString을 사용해야합니다. strcmp는 예상대로 데이터를 얻지 못하기 때문에 무작위로 true를 반환한다고 생각합니다. char *를 입력으로 받아 들여야하지만 NSString을 그 안에 넣고 있습니다. 따라서 전체 비트와 바이트는 잘못 처리됩니다. 다른 문자열로 시도해보십시오. 가끔은 틀림없이 가끔 거짓이 있습니다. – tamasgal

+0

나에게 맞는 예제가 효과적입니다! 도와 주셔서 대단히 감사합니다. – Rick

관련 문제