Objective-C,来自Console的简单字符串输入?

时间:2011-09-01 04:35:43

标签: objective-c string input

我老老实实做了a)使用关键词进行搜索,b)在询问之前阅读“类似标题的问题”。

此外,我试图让这个问题更简洁,但在这种情况下,我很难做到这一点。如果你觉得这个问题过于冗长,我就明白了。只是不要试图回答。

我正在尝试编写非常简单的Objective-C程序,这些程序反映了我的入门java类中的基本作业。我在夏天完成了一本客观的书,现在我想在objective-c中做很多练习题,同时我还要练习java练习题。我正在避开Objective-c GUI环境,只想专注于使用该语言一段时间。我还有很多东西要学习如何解决问题。

我从我的java作业复制的程序是标准类型。我要求用户通过控制台输入数字和输入字符串。我能够使用扫描f在此处找到的示例从控制台获取数字输入。 (我将在下面列出几个代码行)。但我不确定如何获取控制台输入并将其存储在字符串(NSString)中。我正在尝试学习使用apple文档并找到一个扫描类型命令的参考,但我无法弄清楚如何使用该命令。似乎很可能是

scanCharactersFromSet:(NSCharacterSet )scanSet intoString:(NSString * )name;

这是我的理解和工作

int age = 0;
NSLog (@"How old are y'all?");

scanf("%d", &age);


NSLog (@"\n Wow, you are %d !", age);

但我不明白如何拾取名为'name'的NSString。我认为我应该把我的'name'作为指针,因为这个类是NSString。

(顺便说一下,我确实尝试使用scanf来拾取字符串,但是编译器不喜欢我尝试将scanf与name一起使用。它说我不应该使用'scanf',因为它期待一种不同的类型数据。我不确定我在哪里找到数据类型'我'。我正在查看我的文字以寻找不同的想法。我猜测scanf与'scanfloat'有关,它显然处理数字数据,所以这是不是一个大惊喜)

我意识到'scanf'不是正确的命令(我真的不明白为什么我甚至无法在苹果文档中找到scanf - 也许它是C?)

我猜测scanCharactersFromSet可能是正确使用的东西,但我只是不明白你是如何弄清楚命令中的位置。我想我倾向于通过实例学习,而我还没有找到一个例子。我想通过阅读文档来弄清楚如何正确学习。但我还没有。

NSString* name ;

scanf("%i", &name);

//scanCharactersFromSet:(NSCharacterSet *)scanSet intoString:(NSString **)name;

...

我的书的目的是让我进入一个gui环境,所以它不涉及输入。

感谢您提供给我的任何指示。

月桂

4 个答案:

答案 0 :(得分:15)

我建议加强C. Objective-c是C上的一个薄层,知识会一遍又一遍地为自己买单。

C有多种阅读方式:

http://www.ehow.com/how_2086237_read-string-c.html

例如:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

char str[50] = {0};                  // init all to 0
printf("Enter you Last name: ");
scanf("%s", str);                    // read and format into the str buffer
printf("Your name is %s\n", str);    // print buffer

// you can create an NS foundation NSString object from the str buffer
NSString *lastName = [NSString stringWithUTF8String:str];

// %@ calls description o object - in NSString case, prints the string
NSLog(@"lastName=%@", lastName);

[pool drain];
return 0;

注意:简单的scanf可以缓冲溢出。围绕这个有多种方法。见:

How to prevent scanf causing a buffer overflow in C?

答案 1 :(得分:15)

这就是Objective C的样子:

  NSString *FNgetInput() {
        @autoreleasepool {
             return [[[NSString alloc] initWithData:[[NSFileHandle fileHandleWithStandardInput] availableData] encoding:NSUTF8StringEncoding] stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
        }
    }

答案 2 :(得分:5)

从cocoa中的标准输入(或任何其他文件句柄)获取数据的方法是使用NSFileHandle类。查看+fileHandleWithStandardInput

的文档

答案 3 :(得分:0)

以下是在2020年使用Objective-C获取用户输入的方法:

main.m

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");

        char str[50] = {0};                  // init all to 0
        printf("Enter you Last name: ");
        scanf("%s", str);                    // read and format into the str buffer
        printf("Your name is %s\n", str);    // print buffer

        // you can create an NS foundation NSString object from the str buffer
        NSString *lastName = [NSString stringWithUTF8String:str];

        // %@ calls description o object - in NSString case, prints the string
        NSLog(@"lastName=%@", lastName);

        return 0;
    }
    return 0;
}

编译并运行:

    $ clang -framework Foundation main.m -o app