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スタイルの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"]){
   .....
   .....
}
于 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 に答える