繁体   English   中英

Objective-C scanf空间问题

[英]Objective-C scanf spaces issue

我正在学习Objective-C,而且我一生无法弄清楚为什么会这样。 当用户输入的代码是:

scanf("%c %lf", &operator, &number);

由于某种原因,它与以下代码混淆:

    doQuit = 0;
    [deskCalc setAccumulator: 0];
    while (doQuit == 0) {
        NSLog(@"Please input an operation and then a number:");
        scanf("%c %lf", &operator, &number);

        switch (operator) { 
            case '+':
                [deskCalc add: number];
                NSLog (@"%lf", [deskCalc accumulator]);
                break;
            case '-':
                [deskCalc subtract: number];
                NSLog (@"%lf", [deskCalc accumulator]);
                break;
            case '*':
            case 'x':
                [deskCalc multiply: number];
                NSLog (@"%lf", [deskCalc accumulator]);
                break;
            case '/':
            if (number != 0) 
                [deskCalc divide: number];
                NSLog (@"%lf", [deskCalc accumulator]);
            else 
                NSLog(@"You can't divide by zero.");
                break; 
            case 'S':
                [deskCalc setAccumulator: number];
                NSLog (@"%lf", [deskCalc accumulator]);
                break;
            case 'E':
                doQuit = 1;
                break;
            default:
                NSLog(@"You did not enter a valid operator.");
                break;
        }
    }

当用户输入例如“ E 10”时,它将退出循环,但还会显示“您没有输入有效的运算符”。 当我将代码更改为:

scanf(" %c %lf", &operator, &number);

突然之间,它没有打印出最后一行。 解决此问题的%c之前的空格是什么?

格式字符串中的空格字符使scanf()读取并忽略任何空格字符,直到下一个非空格字符。 在您的情况下,这将照顾到先前输入中剩余的换行符。

至于/的情况下,压痕是在误导你-在语句if分支是不正确的。 如果要在那里有多个语句,则需要使用花括号将它们放在一个块中:

if (number != 0) {
    [deskCalc divide: number];
    NSLog (@"%lf", [deskCalc accumulator]);
} else {
    NSLog(@"You can't divide by zero.");
}

请注意,此处不需要else分支周围的花括号(它仅包含一个语句),但有助于提高可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM