从可可/基础工具控制台读取输入?

时间:2009-05-15 17:01:00

标签: cocoa console foundation

我想知道Objective-C / Foundation是否有任何用于从控制台读取用户输入的特殊命令。因为它有输出的NSLog,所以我可以使用其他东西而不是scanf命令。

我需要在我的工具中读取一些数字(用户输入)。在double或int等类型中获取这些输入的最佳方法是什么?我如何将用户输入到NSString?

3 个答案:

答案 0 :(得分:9)

我之前很无聊,遇到过'use scanf'这个问题。因为我想看看我是否可以在没有进入c的情况下做到这一点,所以出现了以下内容:

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

我确信有人可以优化它并使其更好(这用于一个非常简单的PoC CLI工具)

答案 1 :(得分:4)

输入的唯一真正Cocoa支持是NSFileHandlefileHandleWithStandardInput。如果你问我,它并不比scanf()更有用。但是为了获得特定类型的输入,那就是NSFormatter的 thing 。标准内容已经有很多预定义的格式化程序类型,如果您有更多特殊需求,可以创建自定义格式化程序。因此,如果你需要比scanf()更多的东西,只需读入数据(带有scanf()的字节或带有NSFileHandle的数据)并从中创建一个NSString,你可以根据自己的内容格式化它

答案 2 :(得分:2)

scanfwhich is a good thing)无关。您可以使用NSFileHandle从stdin中篡改数据;对于交互式输入,fgets更好。然后,您需要使用strtol / strtoul / strtod,NSScanner或NSNumberFormatter将输入转换为数字类型。