Read input from a cocoa/foundation tool console?

后端 未结 3 1633
面向向阳花
面向向阳花 2020-12-17 06:44

I wonder if Objective-C/Foundation has any special commands for reading user input from the console. Since it has NSLog for output maybe there is something else I could use

相关标签:
3条回答
  • 2020-12-17 07:18

    I was bored earlier and came across this issue of 'use scanf'. since I wanted to see if I could do it without dropping into c, the following came up:

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

    I'm sure somebody could optimize this and make it nicer (this was used for a really simple PoC CLI tool)

    0 讨论(0)
  • 2020-12-17 07:23

    Nothing like scanf (which is a good thing). You can slurp data from stdin using NSFileHandle; for interactive input, fgets is better. You'll then want to use either strtol/strtoul/strtod, NSScanner, or NSNumberFormatter to convert the input to numeric types.

    0 讨论(0)
  • 2020-12-17 07:29

    The only real Cocoa support for input is NSFileHandle's fileHandleWithStandardInput. It isn't really more useful than scanf() if you ask me. But for getting input into specific types, well, that's pretty much NSFormatter's thing. There are already a lot of predefined formatter types for standard things, and you can make a custom formatter if you have more specialized needs. So if you need something a little more than scanf(), just read in the data (either as bytes with scanf() or data with NSFileHandle) and make an NSString from it and you can format it to your heart's content.

    0 讨论(0)
提交回复
热议问题