下面的代码。 我试着获得像“a1”,“c4”这样的字符串答案

这就是我所拥有的而不是“a1”:“adresse finale:\ 340} 00 \ 214” 用这个主题:

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

方法是:

-(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;

}

你能帮帮我吗? 提前谢谢。

有帮助吗?

解决方案

我可以在您的代码中看到三个问题:

1。 当你这样做

lettreChiffre[1]=(char) j;

记住 j 1 8 之间的数字,所以你得到的值是 j <的ASCII字符/ code>,而不是字符 1 ... 8 。你应该使用

lettreChiffre[1]= '0' + j;

2。 lettreChiffre 是一个长度为2的 char 数组,这意味着终端空字符没有空间。这可能会奏效,但可能会给你带来胡言乱语。你应该改为声明

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

3。 您正在尝试使用 printf 来打印 NSString ,但这是无法做到的。使用

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

或将 NSString 转换回C字符串:

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

另外,正如@dreamlax所说,你真的不需要循环。我以为你正在做其他事情而遇到了这个麻烦,所以我们并没有真正看到完整的代码。但是,如果这真的是你的整个代码,那么你可以简单地删除@dreamlax建议的循环。

其他提示

循环的目的是什么?你有一个循环,基本上暴力迫使矩阵计算&#8220;方形地址&#8221;。如果 x 大于8,您的方法也将返回未初始化的指针。

您的整个方法可以变得更加简单。

- (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];
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top