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