ObjC: scanf пропущен в цикле do / while - PullRequest
1 голос
/ 23 февраля 2011

Я только начинаю учить себя Objective C и дурачусь с простым консольным калькулятором.Для начала я спрашиваю пользователя, какую операцию он хотел бы выполнить, с какими двумя числами выполнить эту операцию, а затем я печатаю ответ после его вычисления.

Эта часть, кажется, работает нормально -Следующая часть, которую я пытаюсь реализовать, - позволить пользователям продолжать делать вычисления, пока они не решат, что они больше не хотят.Я хотел подойти к этому, чтобы в конце проверки запустить калькулятор в цикле do / while, чтобы проверить, хочет ли пользователь продолжить через 'y' или 'no' через scanf (); и затем проверитьПосмотрите, какой пользователь решил ответить.С чем я сталкиваюсь, так это в конце первого прохода, запрос на ввод через 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;
}

Заранее спасибо за любую помощь.Если я не предоставил достаточно информации, я прошу прощения!Пожалуйста, дайте мне знать, и я буду более чем готов предоставить больше.Еще раз спасибо всем!

1 Ответ

0 голосов
/ 23 февраля 2011

Возможно, вы захотите взглянуть на Scanf пропускает все остальные циклы while в C

Вам необходимо проделать дополнительную работу, чтобы scanf () прочитал новую строку, находящуюся на стандартном вводе, после того, как пользователь ввел 'y', 'n' или любые другие потоки клавиш, по которым он нажал, прежде чем нажать клавишу ввода.

Эта другая публикация также кажется уместной: Почему scanf () вызывает бесконечный цикл в этом коде?

...