我需要获取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
答案 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字符串。