【问题标题】:ObjC: scanf skipped in do/while loopObjC:scanf 在 do/while 循环中跳过
【发布时间】:2011-02-23 18:56:43
【问题描述】:

我刚刚开始自学Objective C,并且一直在玩一个简单的基于控制台的计算器。首先,我询问用户他们想要执行哪个操作,对哪两个数字执行该操作,然后在计算完答案后打印出来。

这部分似乎一切正常——我尝试实现的下一个部分是允许用户继续进行计算,直到他们决定不再需要。我的想法是在检查结束时将计算器的运行置于 do/while 循环中,以查看用户是否希望通过 scanf(); 继续通过“y”或“否”,然后检查查看用户选择响应的内容。我遇到的是在第一遍结束时,通过 scanf() 请求输入;只是被忽略,程序终止。

我希望得到一些帮助 :) 我已经尽我所能通过故障排除、在线研究(在 scanf() 的空白问题上找到了一些东西;但这没有帮助),有些人猜测,但迄今为止我一直没有成功。以下是我的代码的主要部分:

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


    float answer;
    char op,repeat;
    NSLog(@"Welcome to my sexy calculater, (_(_)!!"); //don't mind me being weird

    Calculater *deskCalc;   
    deskCalc=[[Calculater alloc] init];

    do
    {

        [deskCalc clear];//clear calc

        op =[deskCalc getOperator]; //get +,-,*,or/
        [deskCalc getNumbers]; //get two numbers

        [deskCalc calculate: op];
        answer=[deskCalc accumulater];

        NSLog(@"Your answer is %f!", answer);


        NSLog(@"Would you like to calculate something again(y/n)?");
        scanf("%c",&repeat);
        //NSLog(@"You typed: %c", repeat);

    } while (repeat=='y');

    [deskCalc release];

    [pool drain];
    return 0;
}

提前感谢您的帮助。如果我没有提供足够的信息,我很抱歉!请让我知道,我将非常愿意提供更多。再次感谢大家!

【问题讨论】:

    标签: objective-c scanf do-while


    【解决方案1】:

    你可能想看看Scanf skips every other while loop in C

    您需要做一些额外的工作以确保 scanf() 在用户输入“y”、“n”或他们在按 Enter 之前按下的任何其他键流之后读取标准输入上的换行符。

    其他帖子似乎也很相关:Why is scanf() causing infinite loop in this code?

    【讨论】:

    • 谢谢比尔 - 我最初的假设是错误的,它实际上是一个空白问题 - 您提供的链接帮助我更好地理解它。随着我技能的提高,我期待避免 scanf。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多