Чтение ввода из консоли инструментов какао / фундамента? - PullRequest
2 голосов
/ 15 мая 2009

Интересно, есть ли в Objective-C / Foundation какие-либо специальные команды для чтения пользовательского ввода с консоли. Так как он имеет NSLog для вывода, возможно, есть что-то еще, что я мог бы использовать вместо команды scanf.

Мне нужно прочитать некоторые цифры (пользовательский ввод) в мой инструмент. Каков наилучший способ получить эти входные данные в таких типах, как double или int? И как я могу получить пользовательский ввод в NSString?

Ответы [ 3 ]

9 голосов
/ 29 октября 2009

Раньше мне было скучно, и я столкнулся с проблемой 'use scanf'. так как я хотел посмотреть, смогу ли я сделать это без перехода в c, появилось следующее:

NSFileHandle *input = [NSFileHandle fileHandleWithStandardInput];
while (1)
{
    NSData* data = [input availableData];
    if(data != nil)
    {    
        NSString* aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }
 }

Я уверен, что кто-то может оптимизировать это и сделать его лучше (это было использовано для действительно простого инструмента CLI PoC)

4 голосов
/ 15 мая 2009

Единственная реальная поддержка Какао для ввода - NSFileHandle fileHandleWithStandardInput. Это на самом деле не более полезно, чем scanf(), если вы спросите меня. Но для получения входных данных определенных типов, это в значительной степени NSFormatter вещь . Уже есть много предопределенных типов форматеров для стандартных вещей, и вы можете создать собственный форматер, если у вас есть более специализированные потребности. Поэтому, если вам нужно что-то немного больше, чем scanf(), просто прочитайте данные (в виде байтов с scanf() или данных с NSFileHandle) и сделайте из них NSString, и вы сможете отформатировать ее в соответствии с вашим сердцем.

2 голосов
/ 15 мая 2009

Ничего подобного scanf (, что хорошо ). Вы можете отбирать данные из стандартного ввода, используя NSFileHandle ; для интерактивного ввода fgets лучше. Затем вы захотите использовать strtol / strtoul / strtod, NSScanner или NSNumberFormatter для преобразования ввода в числовые типы.

...