Я только начал изучать Objective-C. Я делаю одно из стандартных упражнений калькулятора. Предполагается создать машину добавления (например, ввести оператора и номер, каждый раз отображать результат). Но я что-то напутал и думаю, что это связано с моим использованием типа данных "char".
Вот код, просто раздел программы (интерфейс и реализация просты и работают в другой версии; тем не менее, если кто-то хочет их увидеть, просто спросите):
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
double value1 = 0.0;
char operator = 'a';
Calculator *deskCalc = [[Calculator alloc] init];
NSLog(@"Initial value?");
scanf("%lf",&value1);
[deskCalc setAccumulator: value1];
while (operator != 'e') {
{
NSLog(@"Operation and value?");
scanf("%c %lf", &operator, &value1);
}
switch (operator){
case '+':
[deskCalc add: value1];
NSLog(@"%f", [deskCalc accumulator]);
break;
case '-':
[deskCalc subtract: value1];
NSLog(@"%f", [deskCalc accumulator]);
break;
case '*':
case 'x':
[deskCalc multiply: value1];
NSLog(@"%f", [deskCalc accumulator]);
break;
case '/':
if (value1 != 0) {
[deskCalc divide: value1];
NSLog(@"%f", [deskCalc accumulator]);
}
else {
NSLog(@"Division by zero not allowed.");
NSLog(@"%f", [deskCalc accumulator]);
}
break;
case 's':
[deskCalc setAccumulator: value1];
NSLog(@"%f", [deskCalc accumulator]);
break;
case 'e':
NSLog(@"Done, sucker, final answer: %f.", value1);
default:
NSLog(@"Unknown operator.");
NSLog(@"%f", [deskCalc accumulator]);
break;
}
}
[deskCalc release];
[pool drain];
return 0;
}
И, в случае, если это помогает, вот что я получаю от терминала, когда я запускаю это:
Из терминала:
Начальное значение?
12 // Мой ввод
Операция и значение?
x 4 // Мои данные
Неизвестный оператор.
Операция и стоимость? // Он не останавливается, чтобы запросить ввод.
48,000000
Операция и значение?
Помощь и спасибо.
P.S. Я знаю, что программа довольно неуклюжа. Прошу прощения, последний язык, который я выучил, был Basic на моем Coleco Adam, у которого был стример - да, как на кассете, который был потрясающим.