1

现在,我知道这对于 MacOS 来说是一个简单的问题,但是当我编译一个包含 'arc4random % n' 的代码时,我只是在终端中收到一条错误日志:

main.m:9: error: ‘arc4random’ undeclared (first use in this function)
main.m:9: error: (Each undeclared identifier is reported only once
main.m:9: error: for each function it appears in.)

我使用:

gcc `gnustep-config --objc-flags` -lgnustep-base main.m -o main

编译它

这是我的代码(如果有帮助的话):

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

        int number, guess;

    number = arc4random() % 101;

    while (!guess == number) {  
        NSLog (@"Please guess a number between 1 and 100");
        scanf ("%i", &guess);

        if  (guess < number) {
            NSLog (@"Sorry, guessed too low!");
        }

        else if (guess > number) {
            NSLog (@"Sorry, guessed too high!");
            }
    }

        NSLog (@"You guessed correct!");

        [pool drain];
        return 0;
}
4

2 回答 2

2

一些东西:

  1. 您使用 >> 和 <<,这些不是有效的比较运算符。这将编译,但不会执行您所期望的。您需要使用 >(大于)、>=(大于或等于)、<(小于)或 <=(小于或等于)。

  2. 您的编译错误是由于您使用了 arc4random。这是一个函数,但您没有这样使用它。您需要将您的线路更改为

    number = arc4random() % 101;
    
  3. 对此不是 100% 确定,但你的 scanf 中的 %i 看起来应该是 %d

于 2012-11-01T08:36:26.740 回答
2

您可以考虑使用clang而不是gcc

采用

clang -fno-objc-arc main.m -framework Foundation -o main

另外我会使用arc4random_uniform(101)而不是arc4random() % 101,因为前者是无偏见的。

于 2012-12-30T13:43:50.163 回答