如何将scanf结果转换为NSString然后变成类的属性?

时间:2013-07-09 13:41:24

标签: objective-c class nsstring scanf

我需要获取scanf结果并将其转换为NSString,然后将NSString转换为Pea类的实例pea1的属性。 如果我可以对scanf设置某种限制,那么用户也不会输入太多字符并停止程序,这也不错。但这并非绝对必要。

我花了我所有的空闲时间(六个小时)试图通过互联网找到它,但它不起作用。将scanf转换为NSString或将NSString转换为类实例的属性有很多结果,但是我找不到两者并且将它们组合起来不起作用。

我需要这个,以便用户可以通过scanf命名一个豌豆,然后显示该豌豆的名字。

这是我的代码,其中包含了一些不会影响此问题的代码:

   #import <Foundation/Foundation.h>

   @interface Pea: NSObject

   @property (retain) NSString *name;

   @end

   @implementation Pea

   @synthesize name;

   @end

   int main (int agrc, char * argv[])

   {
       @autoreleasepool {
           Pea *pea1 = [[Pea alloc] init];

           char word;

           //Asks for name of Pea
           NSLog(@"What would you like to name this pea?");
           scanf("%s", &word);

           NSString* userInput = [[NSString alloc] initWithUTF8String: &word];
           [pea1 setName: userInput];

           //NSLogs data
           NSLog (@"Your pea plant, %@\n.", [pea1 name]);

       }
       return 0;
    }

非常感谢您的帮助! :d

2 个答案:

答案 0 :(得分:2)

首先,你试图将一个字符串存储在单个字符中,这是错误的,因为用户可能会输入一个长于一个字符的字符串,所以你必须起诉一个数组:

size_t size= 100; // Arbitrary number
char word[size];

然后我建议使用 fgets 而不是 scanf ,这样就可以限制输入中的字符数:

fgets(word,size,stdin);

fgets 也会附加终止字符,但它不会删除'\ n'字符,所以万一你不需要它,你必须删除它:

size_t length= strlen(word);
if(word[length-1] == '\n')   // In case that the input string has 99 characters plus '\n'
    word[length-1]= '\0';    // plus '\0', the '\n' isn't added and the if condition is false

最后创建Objective-C字符串:

NSString* value= [NSString stringWithUTF8String: word];
pea1.name= value;

答案 1 :(得分:0)

char是一个符号,也许你的意思是char *word

您的问题是 - 您扫描1个符号,然后将其用作char字符串。