Как создать метод getInt с использованием try-catch и цикла do-while? - PullRequest
0 голосов
/ 25 января 2012

Я пытался создать метод, в котором пользователь может ввести значение между x и y. Цикл while гарантирует, что входное значение остается между x и y, и мой try-catch должен выдавать исключение, если пользователь вводит недопустимую переменную (т.е. пользователь вводит «e», когда программа ожидает целое число). Цикл do-while служит для зацикливания метода, если допустимая переменная не была введена.

вот мой код, когда я запускаю его, все работает нормально, за исключением случаев, когда я пытаюсь ввести недопустимую переменную (например, если я ввожу 'e' или '$'), тогда моя программа просто зацикливает код "NSLog ( @ "Введите число между% i и% i", min, max) "бесконечно.

#import <Foundation/Foundation.h>
@interface UI : NSObject
{
    int a;
    int ok;
}

-(int)getInt:(int)min:(int)max;

@end

@implementation UI

-(int) getInt: (int) min: (int) max{
    ok = 0;

    do {
        @try {
            NSLog(@"Enter a number between %i and %i: ", min, max);
            scanf("%i", &a);
            while(a<min || a>max){
                NSLog(@"Make sure your number is between %i and %i: ", min, max);
                scanf("%i", &a);
            }
            ok=1;

        }
        @catch (NSException * e) {
            NSLog(@"Error. Re-enter your number");
        }
    } while (ok=0);

    return a;
}

@end




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

    UI *ui = [[UI alloc] init];

    NSLog(@"The number you entered is %i", [ui getInt:1 :10]);

    [ui release];
    [pool drain];
    return 0;
}

Ответы [ 2 ]

4 голосов
/ 25 января 2012

На самом деле у вас нет кода, который генерирует исключение, поэтому неудивительно, что исключение не выдается.Чтобы сгенерировать исключение, вы должны использовать @ throw.

Однако, это не то, как вы должны это делать в любом случае .Исключения в Objective-C почти всегда зарезервированы для невосстановимых ошибок программирования, не неправильный ввод пользователя.Вы не должны использовать исключения для нормального потока управления.

2 голосов
/ 25 января 2012

scanf - это функция библиотеки C, она не генерирует исключения Objective-C.Вам нужно проверить возвращаемое значение из scanf, оно возвращает количество успешно проанализированных элементов, поэтому в вашем случае это будет 1, если было введено целое число.

В общем случае вы не должны использовать исключения в Objective-C для такой ситуации - они зарезервированы для исключительных проблем, и опечатка не такая.

...