将scanf与NSStrings一起使用

时间:2010-07-10 21:02:30

标签: objective-c string scanf

我希望用户输入一个字符串,然后将输入分配给NSString。现在我的代码看起来像这样:

NSString *word; 

scanf("%s", &word);

8 个答案:

答案 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不适用于对象。它仅适用于原始数据类型,例如:

  1. INT
  2. BOOL
  3. 怎么做?

    从技术上讲,字符串由一系列单个字符组成。因此,要接受字符串输入,您可以读取字符序列并将其转换为字符串。

    使用:

    [NSString stringWithCString:cstring encoding:1];
    

    这是一个有效的例子:

    NSLog(@"What is the first name?");
    char cstring[40];
    scanf("%s", cstring);
    
    firstName = [NSString stringWithCString:cstring encoding:1];
    

    以下是对上述代码的解释,评论评论:

    1. 您声明一个名为cstring的变量,可容纳40个字符。
    2. 然后通过使用%s格式说明符告诉scanf预期字符列表。
    3. 最后,从读入的字符列表中创建一个NSString对象。
    4. 运行你的项目;如果输入单词并按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];