我刚刚开始学习 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;
}
如果有帮助,下面是我在运行此命令时从终端获得的信息:
从终端:
Initial value?
12 // My input
Operation and value?
x 4 // My input
Unknown operator.
Operation and value? // It doesn't stop to ask for input.
48.000000
Operation and value?
帮助和感谢。
附言我知道这个程序很笨拙。天哪,我学习的最后一门语言是在我的 Coleco Adam 上学的 Basic,它有一个磁带驱动器——是的,就像盒式磁带,太棒了。
最佳答案
scanf(" %c %lf", &operator, &value1);
在左引号和 %c
之间放置一个空格,以捕获标准输入中剩余的任何空格。
关于objective-c - While 循环与 Objective-C 中的嵌套开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6098890/