Objective-C如何从标准输入读取数据并忽略额外(不需要的)字符

时间:2012-11-26 23:36:05

标签: objective-c

我目前正在使用以下代码从标准输入中读取第一个字符(在提示之后):

NSFileHandle *stdIn = [NSFileHandle fileHandleWithStandardInput];
    NSString* input = [[NSString alloc]
        initWithData:[stdIn readDataOfLength:1]
        encoding:NSUTF8StringEncoding];

但是,在程序完成后,所有额外的字符都会被命令行解释(在本例中为bash)。例如,提示符为

File already exists, do you want to overwrite it? [y/N]

如果我输入noooooo,bash会在程序结束后说-bash: oooooo: command not found。我该如何避免这种情况?预期使用[stdIn readDataToEndOfFile]无效。

我可以使用[stdIn readToEndOfFileInBackgroundAndNotify],但如果我需要再次从这样的提示中获取用户输入,那就不可能了。

2 个答案:

答案 0 :(得分:12)

如果您想严格遵守目标C,您可以随时执行:

NSFileHandle *kbd = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [kbd availableData];
NSString *option = [[[NSString alloc] initWithData:inputData 
                 encoding:NSUTF8StringEncoding] substringToIndex:1];
NSLog(@"%@",option);

答案 1 :(得分:4)

你没有使用scanf的任何特殊原因?

有关如何操作的简要指南,请参阅Using scanf with NSStrings,以及如何将scanf的C方面与Obj-C集成。