objective-c - While 循环与 Objective-C 中的嵌套开关

标签 objective-c char while-loop switch-statement

我刚刚开始学习 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/

相关文章:

ios - 将 UIImage 从一个 Viewcontroller 传递到另一个 Viewcontroller 得到 nil

ios - NSFileManager createFileAtPath 在 iPad 上失败但在模拟器上工作

objective-c - 如何将 NSPredicateEditor/NSRuleEditor 背景设置为交替行?

c++ - 大/小端检测器 (C++)

java - While Loop with hasNextInt() 实际读取?

ios - iPhone - 从我的应用程序添加电子邮件帐户

c - 为什么当变量类型不同时,下面的代码给出不同的输出?

c - 在井字游戏中找到赢家

c - 用其他字符的框架在 C 中编程矩形

JavaScript while 循环在 var 声明之前接受条件