Objective-C, Простой ввод строки из консоли?
Я честно сделал a) поиск с использованием ключевых слов и b) прочитал "вопросы с похожими заголовками", прежде чем задавать это.
Также я попытался сделать этот вопрос более кратким, но в этом случае мне было трудно это сделать. Если вы чувствуете, что вопрос слишком многословен, я понимаю. Просто не пытайтесь ответить.
Я пытаюсь написать очень простые программы objective-C, которые отражают основные назначения в моем вводном классе java. Я работал над книгой objective-C в течение лета, и теперь я хочу делать множество практических проблем в objective-c, одновременно с тем, что я делаю проблемы с практикой Java. Я избегаю среды objective-C GUI и хочу сосредоточиться на работе с языком некоторое время. Мне еще многое предстоит узнать о том, как это понять.
Программа, которую я дублирую из моей домашней работы в java, является стандартным типом. Я запрашиваю у пользователя ввод номера и ввод строки через консоль. Мне удалось получить числовой ввод с консоли, используя пример, который я нашел здесь, используя scan f. (Я поставлю пару строк кода ниже). Но я не уверен, как получить консольный ввод и сохранить его в строке (NSString). Я пытаюсь научиться использовать документацию на яблоко и нашел ссылку на команду типа сканирования, но я не могу понять, как использовать эту команду. Тот, который кажется вероятным,
scanCharactersFromSet: (NSCharacterSet) scanSet inString: (имя NSString *);
Вот что я понимаю и работаю
int age = 0;
NSLog (@"How old are y'all?");
scanf("%d", &age);
NSLog (@"\n Wow, you are %d !", age);
Но я не понимаю, как выбрать NSString с именем 'name'. Я ДУМАЮ, Я должен сделать свой указатель "name'a", потому что класс - NSString.
(BTW Я попытался использовать scanf для записи строки, но компилятор не любит, когда я пытаюсь использовать scanf в сочетании с именем. В нем говорится, что я не должен использовать "scanf", потому что он ожидает другого рода Я не уверен, где я нашел тип данных "i". Я просматривал текст для разных идей. Я предполагаю, что scanf связан с "scanfloat", который явно имеет дело с числовыми данными, поэтому это не большой сюрприз)
Я понимаю, что "scanf" не является правильной командой (и я действительно не понимаю, почему я даже не могу найти scanf в документации Apple - возможно, это C?)
Я предполагаю, что scanCharactersFromSet может быть правильным, но я просто не понимаю, как вы определяете, что происходит в команде. Наверное, я склонен учиться на примере, и я не нашел примера. Я хотел бы выяснить, как правильно учиться, прочитав документацию. Но я еще не там.
NSString* name ;
scanf("%i", &name);
//scanCharactersFromSet:(NSCharacterSet *)scanSet intoString:(NSString **)name;
...
Моя книга ориентирована на перемещение меня в среду gui, поэтому она не касается ввода.
Спасибо за любые указатели, которые вы можете мне дать.
Лорел
Ответы
Ответ 1
Я бы рекомендовал наращивать C. Objective-c - это тонкий слой над C, и это знание будет платить за себя снова и снова.
В C есть несколько способов чтения:
http://www.ehow.com/how_2086237_read-string-c.html
Например:
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
char str[50] = {0}; // init all to 0
printf("Enter you Last name: ");
scanf("%s", str); // read and format into the str buffer
printf("Your name is %s\n", str); // print buffer
// you can create an NS foundation NSString object from the str buffer
NSString *lastName = [NSString stringWithUTF8String:str];
// %@ calls description o object - in NSString case, prints the string
NSLog(@"lastName=%@", lastName);
[pool drain];
return 0;
ПРИМЕЧАНИЕ: простое сканирование f восприимчиво к переполнению буфера. Там много разных подходов. см:
Как предотвратить сканирование, вызывающее переполнение буфера в C?
Ответ 2
Вот как выглядит Objective C:
NSString *FNgetInput() {
@autoreleasepool {
return [[[NSString alloc] initWithData:[[NSFileHandle fileHandleWithStandardInput] availableData] encoding:NSUTF8StringEncoding] stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
}
}
Ответ 3
Способ получения данных со стандартного ввода (или любого другого дескриптора файла) в cocoa заключается в использовании класса NSFileHandle
. Проверьте документы для +fileHandleWithStandardInput