Я пытался создать метод, в котором пользователь может ввести значение между 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;
}