Использование scanf с помощью NSStrings

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

NSString *word; 

scanf("%s", &word);

Ответ 1

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

Ответ 2

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

Ответ 3

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

  • ИНТ
  • поплавок
  • BOOL
  • char

Что делать?

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

использование:

[NSString stringWithCString:cstring encoding:1];

Вот рабочий пример:

NSLog(@"What is the first name?");
char cstring[40];
scanf("%s", cstring);

firstName = [NSString stringWithCString:cstring encoding:1];

Вот объяснение приведенного выше кода, комментарий по комментарию:

  • Вы объявляете переменную cstring, содержащую 40 символов.
  • Затем вы скажите scanf ожидать список символов с помощью спецификатора формата% s.
  • Наконец, вы создаете объект NSString из списка символов, которые были прочитаны.

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

Взято из: RW.

Ответ 4

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

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

NSString * userInput = [[NSString alloc] initWithCString: word encoding: NSUTF8StringEncoding];

Ответ 5

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

Ответ 6

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

 NSLog(@"Enter The Name Of State");
 char name[20];
 gets(name);
 NSLog(@"%s",name);

Ответ 7

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

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

Ответ 8

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

NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [inputFile availableData];
NSString *word = [[NSString alloc]initWithData:inputData encoding:NSUTF8StringEncoding];