Я пытался проверить, нечетен ли NSInteger или ровен. Я нашел способ сделать это с помощью C, но это не работает с Objective C. Как я сделал бы это?
NSInteger
определяется как int
(или long
в некоторых средах). Итак, проверка на странность похожа на простой int:
NSInteger num;
if (num % 2)
// odd
else
// even
Насколько мне известно. NSInteger
, в отличие от NSNumber
, представляет собой просто средство набора для реального целочисленного типа в соответствии со строками:
typedef long NSInteger;
Итак, вы должны уметь:
NSInteger nsintvar = 77;
if ((nsintvar % 2) == 0) {
// number is even
} else {
// number is odd
}
Вот полная программа, скомпилирован под Cygwin с помощью GNUstep, который иллюстрирует это:
#import <stdio.h>
#import <Foundation/NSObject.h>
int main( int argc, const char *argv[] ) {
NSInteger num;
for (num = 0; num < 20; num++) {
if ((num % 2) == 0) {
printf ("%d is even\n", num);
} else {
printf ("%d is odd\n", num);
}
}
return 0;
}
Он выводит:
0 is even
1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even
11 is odd
12 is even
13 is odd
14 is even
15 is odd
16 is even
17 is odd
18 is even
19 is odd
NSInteger n = 5;
NSLog(@"%s", n & 1 ? "odd" : "even");
или использование if
if (n & 1) {
; // odd
} else {
; // even
}
с некоторым выходом:
if (n & 1) {
NSLog(@"odd");
} else {
NSLog(@"even");
}
пример указателя:
NSInteger x = 7;
NSInteger *y = &x;
if (*y & 1) {
NSLog(@"odd");
} else {
NSLog(@"even");
}
Эти другие ответы должны работать. Может быть, проблема в вашем make-файле или что-то в этом роде. Думайте за пределами этого фрагмента кода.
Если ничего не помогает, просто объявите целое число как int. Вам не нужно объявлять его как NSInteger.