我目前正在使用以下代码从标准输入中读取第一个字符(在提示之后):
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]
,但如果我需要再次从这样的提示中获取用户输入,那就不可能了。
答案 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集成。