0

我需要获取一个 scanf 结果并将其转换为 NSString,然后将 NSString 转换为豌豆类实例 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

4

2 回答 2

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;
于 2013-07-09T14:17:17.070 回答
0

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

您的问题是 - 您扫描 1 个符号,然后像 char 字符串一样使用它。

于 2013-07-09T14:14:32.853 回答