我刚刚开始学习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及其使用方式有关 如果,但我无法找到的是我做错了什么。
请帮助:)
答案 0 :(得分:1)
代码中有3个错误
1)我认为你对NSString和C风格的char数组感到困惑......你只需要使用单个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"]){
.....
.....
}
答案 1 :(得分: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 {
...
}