Objective-C, простой ввод строки из консоли? - PullRequest
18 голосов
/ 01 сентября 2011

Я, честно говоря, а) провел поиск по ключевым словам и б) прочитал «вопросы с похожими названиями», прежде чем задавать этот вопрос.

Также я попытался сделать этот вопрос более кратким, но мне было трудночто в этом случае.Если вы чувствуете, что вопрос слишком многословен, я понял.Только не пытайтесь отвечать.

Я пытаюсь написать очень простые программы на языке C, которые отражают базовые задания в моем вводном классе Java.В течение лета я работал над целевой книгой, и теперь я хочу делать много практических задач в объективной с, в то же время, как я решаю проблемы с практикой Java.Я избегаю GUI-среды target-c и просто хочу немного поработать с языком.Мне еще многое предстоит узнать о том, как разобраться.

Программа, которую я дублирую из моей домашней работы на Java, является стандартным типом.Я прошу пользователя для ввода чисел и ввода строки через консоль.Мне удалось получить числовой ввод из консоли, используя пример, который я нашел здесь, используя сканирование f.(Я поставлю пару строк кода ниже).Но я не уверен, как получить консольный ввод и сохранить его в строке (NSString).Я пытаюсь научиться использовать документацию Apple и нашел ссылку на команду типа сканирования, но не могу понять, как использовать команду.Наиболее вероятным является

scanCharactersFromSet: (NSCharacterSet ) scanSet intoString: (NSString *) name;

Вот что я понимаю и работает

int age = 0;
NSLog (@"How old are y'all?");

scanf("%d", &age);


NSLog (@"\n Wow, you are %d !", age);

Но я не понимаю, как подобрать строку NSS с именем 'name'.Я думаю, я должен сделать мой указатель name'а, потому что класс NSString.

(Кстати, я пытался использовать scanf для захвата строки, но компилятору не нравится, когда я пытаюсь использовать scanf в сочетании с именем. Он говорит, что я не должен использовать 'scanf', потому что он ожидаетдругой тип данных. Я не уверен, где я нашел тип данных «i». Я просматривал свой текст на предмет различных идей. Я предполагаю, что scanf связан с «scanfloat», который явно имеет дело с числовыми данными,так что это не является большим сюрпризом)

Я понимаю, что 'scanf' - неправильная команда (и я действительно не понимаю, почему я даже не могу найти scanf в документации Apple - возможно, это C?)

Я предполагаю, что scanCharactersFromSet может быть правильным выбором, но я просто не понимаю, как вы выясняете, что происходит в команде.Я думаю, что я склонен учиться на примере, и я не нашел пример.Я хотел бы выяснить, как правильно учиться, читая документацию.Но я еще не там.

NSString* name ;

scanf("%i", &name);

//scanCharactersFromSet:(NSCharacterSet *)scanSet intoString:(NSString **)name;

...

Моя книга ориентирована на то, чтобы перенести меня в среду графического интерфейса, поэтому она не касается ввода.

Спасибо за любые указатели, которые вы можете дать мне.

Лавр

Ответы [ 3 ]

15 голосов
/ 10 сентября 2014

Вот как выглядит Цель C:

  NSString *FNgetInput() {
        @autoreleasepool {
             return [[[NSString alloc] initWithData:[[NSFileHandle fileHandleWithStandardInput] availableData] encoding:NSUTF8StringEncoding] stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
        }
    }
15 голосов
/ 01 сентября 2011

Я бы порекомендовал перейти на 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;

ПРИМЕЧАНИЕ. Простое сканирование может быть переполнено буфером. Есть несколько подходов к этому. см:

Как предотвратить сканирование, вызывающее переполнение буфера в C?

5 голосов
/ 01 сентября 2011

Чтобы получить данные из стандартного ввода (или любого другого дескриптора файла) в какао, используйте класс NSFileHandle. Проверьте документы на +fileHandleWithStandardInput

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...