我想知道Objective-C / Foundation是否有任何用于从控制台读取用户输入的特殊命令。因为它有输出的NSLog,所以我可以使用其他东西而不是scanf命令。
我需要在我的工具中读取一些数字(用户输入)。在double或int等类型中获取这些输入的最佳方法是什么?我如何将用户输入到NSString?
答案 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支持是NSFileHandle的fileHandleWithStandardInput
。如果你问我,它并不比scanf()
更有用。但是为了获得特定类型的输入,那就是NSFormatter的 thing 。标准内容已经有很多预定义的格式化程序类型,如果您有更多特殊需求,可以创建自定义格式化程序。因此,如果你需要比scanf()
更多的东西,只需读入数据(带有scanf()
的字节或带有NSFileHandle的数据)并从中创建一个NSString,你可以根据自己的内容格式化它
答案 2 :(得分:2)
与scanf
(which is a good thing)无关。您可以使用NSFileHandle从stdin中篡改数据;对于交互式输入,fgets
更好。然后,您需要使用strtol
/ strtoul
/ strtod
,NSScanner或NSNumberFormatter将输入转换为数字类型。