0

我最近刚开始学习Objective C,当我运行下一个程序时,我收到错误“程序接收信号:”EXC_BAD_ACCESS“对于代码行

 if([*userChoice isEqualToString:@"yes"])

完整的代码是:

void initGame (void);
void restartGame(void);
void toGoOn(char *playerChoice);


int guess=-1;
int from=-1;
int to=-1;
bool playStatus=true;
bool gameStatus=true;
int answer=-1;
NSString *userChoice[10];

//if true the game is on

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        GuessManager *game=GUESS;  
        NSLog(@"Hello, lets play");
        NSLog(@"Please provide a positive range in which you would like to play");
      do{
          initGame();
          [game setnumberToGuess:from :to];
        do {                       
            printf("Make you guess:");
            scanf("%d", &guess);
            [game setUserGuess:guess];
            [game checkUserGuess];
            if([game getDidIgetIt])
            {
                playStatus=false;               
            } 
            else
            {
                playStatus=true;
            }

        } while (playStatus);
         restartGame();
      }while(gameStatus);  
        printf("Thanks For Playing PanGogi Games! GoodBye");
    }
    return 0;
}





void initGame (void)
{
    printf("from:");
    scanf("%d",&from);
    printf("to:");
    scanf("%d",&to);    
}

void restartGame(void)
{
    printf("Would you like to continue?(yes/no)");
    scanf("%s",&userChoice); 
    //scanf("%d",&answer); 

   // if(answer==1)
    if([*userChoice isEqualToString:@"yes"])
    {
        gameStatus=true;
    }
    else
    {
        gameStatus=false;
    }
}

我知道它与 NSString 变量 userChoice 以及它在 if 中的使用方式有关,但我找不到的是我做错了什么。

请帮忙 :)

4

2 回答 2

1

您的代码中有 3 个错误

1)我认为你对 NSString 和 C 风格的字符数组感到困惑......你只需要使用单个 NSString 对象来保存多字符数据..

NSString *userChoice;   

2)由于要使用scanf输入数据,所以需要一个C风格的字符数组。scanf 不适用于 NSString 类型。

char tempArray[10];
int count = scanf("%s",&tempArray);
userChoice  = [NSString stringWithBytes:tempArray length:count encoding: NSUTF8StringEncoding];

3) 现在你可以直接使用 NSString 了。不需要像语法这样的指针

if( [userChoice isEqualToString: @"yes"]){
   .....
   .....
}
于 2012-10-16T10:14:05.960 回答
0

您使用NSString的好像是char. 它不是。它是一个代表字符串的类。

scanf函数是一个 C 函数,需要一个 char 数组,而不是NSString.

char str[80];
scanf("%s", &str);

您可以使用这样的数组初始化NSString对象:char

NSString *userChoice = [NSString stringWithCString:str encoding:NSASCIIEncoding];

并像这样比较:

if ([userChoice isEqualToString:@"yes"]) {
   ...
} else {
   ...
}
于 2012-10-16T10:17:53.597 回答