2017-06-04 5 views
1

Ich bin ein Objective-C Anfänger, und ich möchte die Elemente eines Arrays von Zeichen zählen bekommen. Ich schaffte es nur auf diese Weise zu finden:Objective-c - get Elemente eines Arrays zählen

@autoreleasepool { 

    char parola[30]; 
    int c; 

    NSLog(@"Write word:"); 
    scanf("%c",&parola[30]); 

    c = sizeof(parola)/sizeof(parola[0]); 
    NSLog(@"The word has %i letters",c); 

} 
return 0; 

Das Problem ist, dass es mir die Länge gibt, gebe ich in der Array-Deklaration angegeben, nicht die Elemente zählen. Irgendeine Idee?

+0

Ich denke, Sie werden ein besseres Glück mit 'NSString' haben, da Sie mit Objective-C zu tun haben. – vitormm

Antwort

2

Sie haben ein paar Fehler dort.

  1. Sie möchten, dass der Benutzer ein "Wort", d. H. Eine Zeichenfolge, eingibt. Dann verwenden Sie nicht %c, die nur ein Zeichen durchsucht, aber %s statt, die eine Zeichenfolge durchsucht (beachten Sie, dass das bedeutet, dass der Benutzer gibt auch Leerzeichen oder mehr als 29 Zeichen).

  2. Sie speichern über dem Array. Das Array wird erklärt, wie

    char parola[30]; 
    

Das bedeutet, kann es mit den Werten 0 indiziert werden .. 29. Aber Ihre &parola[30] Punkte über das Array (bei Index 30, der nicht "existieren"). Das ist nicht was du willst. Tun Sie dies:

scanf("%s", parola); 

Und hoffe, dass der Benutzer nicht mehr als 29 Zeichen eingeben.

Die Länge der Zeichenfolge dann gefunden, lassen sich mit

c = strlen(parola); 

So wird daraus:

@autoreleasepool { 
    char parola[30]; 
    unsigned long c; 

    NSLog(@"Write word:"); 
    scanf("%s", parola); 

    c = strlen(parola); 
    NSLog(@"The word has %ld letters", c); 

} 
return 0; 

Statt NSLog, können Sie auch printf verwenden können:

printf("Write word: "); 

und

printf("The word has %ld letters\n", c); 

die sauberen aussehen wird, wie NSLog() immer diese zusätzliche Infos zeigt, wie

2017-06-04 12:37:25.758802+0200 SOTest[4718:2690388] 

Und das ist, IMO, nur hässlich. Gut für ein Protokoll, aber nicht gut für eine saubere Bildschirmausgabe. Die Ausgabe wird jetzt:

+0

@sulthan: Dein Kommentar auf der anderen (gelöscht) Antwort: "Auf LLVM muss @autoreleasepool überhaupt nicht verwendet werden. Jeder Thread erhält standardmäßig einen." ist korrekt, aber der '@autoreleasepool {}' Teil wird von Xcode generiert, wenn Sie ein neues Konsolenprogramm in Objective-C aus dem Menü starten. Es benutzt auch 'NSLog()', um "Hallo, Welt!" 'Anstelle von' printf() 'zu drucken. –

+0

Es funktioniert! Vielen Dank :) – Edo

Verwandte Themen