Objective C-Char-Array Problem
Hey Leute also ich bin versuchen zu lernen objective-c, wie eine unabhängige Studie für meine Schule, und einer meiner Projekte einfach zu üben, ist ein Rechner-Programm, wo der Benutzer Eingänge einer Reihe von zahlen und Operatoren ein und das Programm bricht es auseinander und macht die Berechnung. Jetzt habe ich den Eingang, und ich versuche, es zu haben finden die Betreiber und legen Sie Sie alle in ein array, so dass Sie Sortieren können, Sie zu finden, Reihenfolge der Operationen, und verwenden Sie die Indizes zu finden, die unterschiedlichen Begriffe; jedoch, wenn ich versuche, drucken Sie das array zu sehen, wenn Ihre Beteiligung die chars, es gibt einige seltsame Symbole wie das apple-logo oder eine upside-down-Fragezeichen. Ich habe eine SSCCE der mein problem-weiß jemand was Los ist?
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *calculation;
char str[50] = {0};
int count = 0;
NSLog(@"What would you like to calculate?");
scanf("%s", str);
calculation = [NSString stringWithUTF8String:str];
for (int i = 0; i < [calculation length]; i++) {
NSRange range = NSMakeRange (i, 1);
if([[calculation substringWithRange: range] isEqualToString: @"*"] ||
[[calculation substringWithRange: range] isEqualToString: @"/"])
count++;
}
char operators[count];
for (int i = 0; i < count; i++) {
for (int j = 0; j < [calculation length]; j++) {
NSRange range = NSMakeRange (j, 1);
NSString *s = [s initWithString:[calculation substringWithRange: range]];
if([s isEqualToString:@"*"]){
operators[i] = '*';
break;
}
if([s isEqualToString:@"/"]){
operators[i] = '/';
break;
}
}
NSLog(@"%c", operators[i]);
}
}
return 0;
}
- Warum bist du nicht mit
-characterAtIndex
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Frage zu beantworten, was Los ist in Ihrem code. Die "komischen Symbole", die Sie sehen, sind die un-initialisiert die Werte im Speicher auf Ihre
operators[]
array.Zu sehen, der Grund, das char[] ist Links mit Müll Werte betrachten in diesem Abschnitt des Codes:
Sie senden
initWithString
zus
.s
ist noch nicht zugewiesen. Dies führt zus
einnil
. Und da das senden einer Nachricht, wieisEqualToString:
zu einemnil
wird im wesentlichen bewertenNO
auch wenn eine@"*"
ist in diesem Bereich Ihre Zuordnung zuoperators[i]
wird nie passieren.Leicht zu beheben, obwohl, ersetzen Sie einfach die
s
Abtretung hiermit an:-characterAtIndex:
ist guter Rat teuer. Es ist effizienter, es muss nicht eine neue erstellen NSString jeder Zeit, es gibt einfach eineunichar
die Sie vergleichen können mit==
. Und da komponiert Zeichensätze, die wahrscheinlich kommen in einem einfachen Taschenrechner(der Hauptgrund -characterAtIndex:
verpönt ist) sollte es sicher sein.Brauchen Sie nicht, etwas Phantasie für diese. Aber: alles verwenden, was es dort für.
* / *
. Aber komm schon, warum Sie nicht ausprobieren?