4

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

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],但如果我需要再次从这样的提示中获取用户输入,这是不可能的。

4

2 回答 2

14

如果您想将其严格保留在 Objective C 中,您可以随时执行以下操作:

NSFileHandle *kbd = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [kbd availableData];
NSString *option = [[[NSString alloc] initWithData:inputData 
                 encoding:NSUTF8StringEncoding] substringToIndex:1];
NSLog(@"%@",option);
于 2014-02-07T03:51:48.223 回答
4

您不使用scanf的任何特殊原因?

有关如何执行此操作以及如何将 scanf 的 C 方面与 Obj-C 集成的简要指南,请参阅将 scanf 与 NSStrings一起使用。

于 2012-11-27T00:07:08.857 回答