Использование scanf с NSStrings - PullRequest
11 голосов
/ 11 июля 2010

Я хочу, чтобы пользователь ввел строку, а затем назначил ввод для строки NSString.Прямо сейчас мой код выглядит так:

NSString *word; 

scanf("%s", &word);

Ответы [ 8 ]

8 голосов
/ 11 июля 2010

Функция 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 - это не то, что вы хотите использовать для получения пользовательского ввода.

7 голосов
/ 24 января 2014

scanf не работает с NSString, так как scanf не работает с объектами.Он работает только для примитивных типов данных, таких как:

  1. int
  2. float
  3. BOOL
  4. char

Что делать?

Технически строка состоит из последовательности отдельных символов.Таким образом, чтобы принять ввод строки, вы можете прочитать последовательность символов и преобразовать ее в строку.

use:

[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. Затем вы указываете scanf ожидать списоксимволов с помощью спецификатора формата% s.
  3. Наконец, вы создаете объект NSString из списка символов, которые были прочитаны.

Запустите ваш проект;если вы введете слово и нажмете Enter, программа должна напечатать то же слово, которое вы ввели.Просто убедитесь, что слово содержит не более 40 символов;если вы введете больше, это может привести к сбою программы - вы можете сами это проверить!:]

Взято из: RW.

7 голосов
/ 11 июля 2010

scanf не работает с любыми типами объектов.Если у вас есть строка C и вы хотите создать из нее строку NSString, используйте -[NSString initWithBytes:length:encoding:].

4 голосов
/ 23 сентября 2012

Вот как я это сделаю:

char word [40];
scanf("%s",word);

NSString * userInput = [[NSString alloc] initWithCString: word encoding: NSUTF8StringEncoding];
1 голос
/ 21 мая 2016

Может быть, это будет работать для вас, потому что он также принимает строку с пробелами.

 NSLog(@"Enter The Name Of State");
 char name[20];
 gets(name);
 NSLog(@"%s",name);
1 голос
/ 14 января 2011

да, но sscanf делает, и может быть хорошим решением для сложного анализа NSString.

0 голосов
/ 06 октября 2016

NSFileHandle класс является объектно-ориентированной оболочкой для файлового дескриптора.Для файлов вы можете читать, писать и искать в файле.

NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [inputFile availableData];
NSString *word = [[NSString alloc]initWithData:inputData encoding:NSUTF8StringEncoding];
0 голосов
/ 13 мая 2016

Простое решение

char word[40];
scanf("%39s", word);
NSString* word2 = [NSString stringWithUTF8String:word];
...