【发布时间】:2011-05-23 14:52:07
【问题描述】:
我刚刚开始学习 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
操作和价值?
帮助和感谢。
附:我知道这个程序很笨拙。求饶,我学的最后一门语言是我的 Coleco Adam 上的 Basic,它有一个磁带驱动器——是的,就像盒式磁带一样,太棒了。
【问题讨论】:
-
虽然可能不是您的问题,但 'e' 的情况并没有中断。你打算这样做吗?
-
请注意,在这种情况下,检查实际值总是很有帮助的,方法是在调试器中检查或打印出来(在这种情况下可能是十六进制或十进制值)。跨度>
-
@Andy,啊,不。我的错。很好地抓住那个。
标签: objective-c char while-loop switch-statement