2011-12-28 3 views
0

Я пытаюсь сравнить пользовательский текст ввода от приложения iphone с текстом в статическом массиве, который я объявил. Он всегда возвращается «истинно», даже когда текст отличается. После выполнения strncmp я отображаю оба текстовых поля. Для человеческого глаза это то, что я ожидаю от полей. Debugmsg, который я возвращаю на экран, показывает, что я ожидаю, что значения будут, но сравнение всегда верно. Мы ценим любые предложения. Благодарю.Почему моя 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 (почему вы используете CString?). strcmp не работает с NSString.

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, и он работал на то, что я делал в то время (ставя свои статические данные в текстовое поле), поэтому я снова использовал его в strncmp. Спасибо за предложение @. Я пробовал только строку с цитатами, и она не работала. Я еще не привык к этому знаку @! – Rick

+0

Ваша проблема в том, что вы не понимаете, как обращаться с объектно-ориентированными понятиями. Вероятно, поэтому у вас не было проблемы с NSString. NSString намного мощнее, чем char *, поэтому, если вы не ограничены памятью, как на IC, вы должны просто использовать NSString. Я думаю, что strcmp возвращает true только случайным образом, поскольку он не получает данные, которые он ожидает. Он должен получить char * как вход, но вы помещаете в него NSString. Таким образом, все биты и байты обрабатываются некорректно. Просто попробуйте с другими строками, и я уверен: иногда вы получите правду, иногда ложь ... – tamasgal

+0

Ваш пример для меня сработал! Большое спасибо за вашу помощь. – Rick

Смежные вопросы