Хотя заявление в Objective-C - PullRequest
       13

Хотя заявление в Objective-C

0 голосов
/ 21 марта 2012

Я изучаю Objective-C и пытаюсь сделать очень простой калькулятор командной строки.«S» должен установить калькулятор на определенное значение, а «E» - завершить работу калькулятора.

Мое решение для этого было создать цикл while и позволить ему работать, пока оператор не равен 'E'или' е '. Проблема : если оператор равен «E» или «e», цикл while все еще выполняется (поскольку он возвращает сообщение «Пожалуйста, используйте действительный оператор»).

(Я также попробовал это с помощью оператора do-while, но это тоже не сработало)

    while (operator != 'E' && operator != 'e')
    {
        NSLog (@"Type in a number and an operator.");
        scanf ("%lf %c", &number, &operator);

        if (operator == 'S' || operator == 's')
        {
            [deskCalc setResult: number];
        }

        else if ( operator == '+' )
        {
            [deskCalc add: number];
        }

        else if ( operator == '-' )
        {
            [deskCalc subtract: number];
        }

        else
        {
            NSLog(@"Please use a valid operator ( + or - )");
        }
    }

    if (operator == 'E' || operator == 'e')
    {
        [deskCalc showResult];
    }

Почему операторы while выполняются, если я использую 'E' как оператор?

Ответы [ 3 ]

1 голос
/ 21 марта 2012

operator не 'E', пока вы не введете его - к этому моменту вы находитесь внутри цикла, поэтому будет отображаться недопустимое сообщение оператора. После вашего scanf вам нужно еще раз проверить и выйти из цикла, если значение равно E или e.

0 голосов
/ 21 марта 2012

Вы должны попробовать [operator isEqual: @ "E"] как

while (![operator isEqual:@'E'] && ![operator isEqual:@'e'])
{
    NSLog (@"Type in a number and an operator.");
    scanf ("%lf %c", &number, &operator);

    if ([operator isEqual:@'S'] || [operator isEqual:@'s'])
    {
        [deskCalc setResult: number];
    }

    else if ([operator isEqual:@'+'] )
    {
        [deskCalc add: number];
    }

    else if ( [operator isEqual:@'-'] )
    {
        [deskCalc subtract: number];
    }

    else
    {
        NSLog(@"Please use a valid operator ( + or - )");
    }
}

if ([operator isEqual:@'E'] || [operator isEqual:@'e'])
{
    [deskCalc showResult];
}

Надеюсь, это поможет вам.

0 голосов
/ 21 марта 2012

Посмотрите на

  while (operator != 'E' && operator != 'e')

Вы ошиблись с "&&", вы должны написать

  while (operator != 'E' || operator != 'e')

Ваш оператор не может быть равен "E" и "e" одновременновремя.

PS вы должны использовать [operator isEqual: @ 'E'], как показал Зохайб

...