我希望用户输入一个字符串,然后将输入分配给NSString。现在我的代码看起来像这样:
NSString *word;
scanf("%s", &word);
答案 0 :(得分:8)
scanf函数读入C字符串(实际上是char数组),如下所示:
char word[40];
int nChars = scanf("%39s", word); // read up to 39 chars (leave room for NUL)
您可以将char数组转换为NSString,如下所示:
NSString* word2 = [NSString stringWithBytes:word
length:nChars
encoding:NSUTF8StringEncoding];
然而 scanf仅适用于控制台(命令行)程序。如果您尝试在Mac或iOS设备上获取输入,则scanf不是您想要用来输入用户的内容。
答案 1 :(得分:7)
scanf
不适用于任何对象类型。如果您有一个C字符串并想从中创建一个NSString,请使用-[NSString initWithBytes:length:encoding:]
。
答案 2 :(得分:7)
scanf不能与NSString一起使用,因为scanf不适用于对象。它仅适用于原始数据类型,例如:
怎么做?
从技术上讲,字符串由一系列单个字符组成。因此,要接受字符串输入,您可以读取字符序列并将其转换为字符串。
使用:
[NSString stringWithCString:cstring encoding:1];
这是一个有效的例子:
NSLog(@"What is the first name?");
char cstring[40];
scanf("%s", cstring);
firstName = [NSString stringWithCString:cstring encoding:1];
以下是对上述代码的解释,评论评论:
运行你的项目;如果输入单词并按Enter键,程序应打印出您键入的单词。只要确保单词少于40个字符;如果你输入更多,你可能会导致程序崩溃 - 欢迎你自己测试一下! :
取自:RW。
答案 3 :(得分:4)
我就是这样做的:
char word [40];
scanf("%s",word);
NSString * userInput = [[NSString alloc] initWithCString: word encoding: NSUTF8StringEncoding];
答案 4 :(得分:1)
是的,但sscanf确实如此,对于复杂的NSString解析可能是一个很好的解决方案。
答案 5 :(得分:1)
也许这对你有用,因为它也接受带空格的字符串。
NSLog(@"Enter The Name Of State");
char name[20];
gets(name);
NSLog(@"%s",name);
答案 6 :(得分:0)
简单解决方案
char word[40];
scanf("%39s", word);
NSString* word2 = [NSString stringWithUTF8String:word];
答案 7 :(得分:0)
NSFileHandle类是文件描述符的面向对象的包装器。对于文件,您可以在文件中进行读取,写入和搜索。
NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [inputFile availableData];
NSString *word = [[NSString alloc]initWithData:inputData encoding:NSUTF8StringEncoding];