Question

code ci-dessous. J'essaie d'obtenir des réponses telles que "a1", "c4"

c’est ce que j’ai au lieu de "a1": "adresse finale: \ 340} 00 \ 214" avec ce prinf:

    printf("\nadresse finale: %s",[self convertCGPointToSquareAdress:self.frame.origin]);

la méthode est la suivante:

-(NSString *) convertCGPointToSquareAdress:(CGPoint ) point{
int x= point.x /PIECE_WIDTH;
int y=point.y/PIECE_WIDTH;
char lettreChiffre[2];
//char chiffre;
NSString *squareAdress;
//ascii a=97 , b=98... h=105
for (int i=97; i<105; i++) {
    for (int j=8; j>0; j--) {
        if(i-97==x && j-1==y ){
            NSLog(@"enterrrrrrrrrred if convertCGPointToSquareAdress"); 
            lettreChiffre[0]=i;
            lettreChiffre[1]=(char) j;
            printf(" lettreChiffre: %s ", lettreChiffre);
            NSString *squareAdress=[NSString stringWithFormat:@"%s", lettreChiffre];
            break;
        }
    }
}
return squareAdress;

}

pouvez-vous m'aider s'il vous plaît? merci d'avance.

Était-ce utile?

La solution

Je peux voir trois problèmes avec votre code:

1. Quand vous faites

lettreChiffre[1]=(char) j;

rappelez-vous que j est un nombre compris entre 1 et 8 . Vous obtenez ainsi le caractère ASCII dont la valeur est j , pas le caractère 1 ... 8 . Vous devriez utiliser

lettreChiffre[1]= '0' + j;

2. lettreChiffre est un tableau char de longueur 2, ce qui signifie qu'il n'y a pas de place pour le caractère nul du terminal. Cela peut fonctionner, mais peut vous donner du charabia. Vous devriez plutôt déclarer

char lettreChiffre[3];
lettreChiffre[2] = '\0';

3. Vous essayez d'utiliser printf pour imprimer un NSString , ce qu'il ne peut pas faire. Soit utiliser

NSLog(@"adresse finale: %@", mynsstring)

ou reconvertissez NSString en chaîne C:

printf("adresse finale: %s", [mynsstring UTF8String]);

De plus, comme l'a noté @dreamlax, vous n'avez pas vraiment besoin de la boucle. J'ai supposé que vous faisiez quelque chose d'autre et que vous avez rencontré ce problème, nous ne voyons donc pas le code complet Mais, s’il s’agit vraiment de l’intégralité de votre code, vous pouvez simplement supprimer la boucle comme le suggère @dreamlax.

Autres conseils

Quel est le but de la boucle? Vous avez une boucle qui force essentiellement une matrice à calculer l’adresse carrée & # 8221 ;. Votre méthode renverra également un pointeur non initialisé si x est supérieur à 8.

Toute votre méthode pourrait être beaucoup plus simple.

- (NSString *) convertCGPointToSquareAdress:(CGRect) point
{
    unsigned int x = point.x / PIECE_WIDTH;
    unsigned int y = point.y / PIECE_WIDTH;

    // Do some range checking to ensure x and y are valid.

    char lettreChiffre[3];
    lettreChiffre[0] = 'a' + x;
    lettreChiffre[1] = '1' + y;
    lettreChiffre[2] = '\0';

    return [NSString stringWithCString:letterChiffre encoding:NSASCIIStringEncoding];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top