سؤال

ورمز أدناه. أنا tryind للحصول على إجابات سلسلة مثل "A1"، "C4"

وهذا ما أواجه بدلا من "A1": "خاتمة العنوان: \ 340} 00 \ 214" مع هذا prinf:

    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، لذلك كنت الحصول على الطابع ASCII قيمته هو j، وليس 1...8 الحرف. يجب عليك استخدام

lettreChiffre[1]= '0' + j;

2. lettreChiffre هو مجموعة char من طول 2، والذي يعني أن هناك أي مجال للحرف اغية المحطة. هذا قد عمل، ولكن قد تعطيك رطانة. يجب عليك بدلا من ذلك أعلن

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

3. كنت تحاول استخدام printf لطباعة NSString، وهو ما لا يمكن القيام به. إما استخدام

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

وأو تحويل NSString مرة أخرى إلى C-سلسلة:

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

وبالإضافة إلى ذلك، كما لاحظdreamlax، أنت لا تحتاج حقا الحلقة. توليت كنت تفعل شيئا آخر، واجهت هذه المشاكل، لذلك نحن لا نرى حقا رمز الكامل. ولكن، إذا كان هذا هو حقا مجمل التعليمات البرمجية الخاصة بك، ثم يمكنك ببساطة إزالة حلقة كما اقترحdreamlax.

نصائح أخرى

ما هو الغرض من الحلقة؟ لديك حلقة أساسا الغاشمة قوات مصفوفة لحساب "عنوان مربع". سوف طريقتك أيضا بإرجاع مؤشر غير مهيأ إذا 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